python学习基础之循环import及import过程


Posted in Python onApril 22, 2018

import介绍

import语句作用就是用来导入模块的,它可以出现在程序中的任何位置。

import语句语法

使用import语句导入模块,import语句语法如下:

import module
关键字 模块名

使用方法例如:

import math #入导math模块
math.floor() #调用math模块中的floor()函数

如果要同时导入多个模块,只需要在模块名之前用逗号进行分隔:

import module1,module2,module3.......

同时导入多个模块的方法,对于初学者来说可读性和可理解性不如第一种好。所以想要导入多个模块时,还是比较推荐用第一种方式,把每一个模块都单独进行一次导入,可能会感觉操作起来麻烦一些,但便于理解。

引用

最近项目组用python,慢慢开始学习了。第一天就遇到了import问题。

python语言的import有两种方法,一个是import 模块名,一个是from 模块名 import 函数或者类或者变量。

直接import只能import模块,不能import 模块里面的内容。使用内容必须加上模块名。

在import的时候,系统会把所有的加载的模块载入内存,并且放入一个map中,from A import B的过程是,看是否有A模块在系统中加载,如果有则直接拿出来,否则新建一个,这时需要填充A模块的内容,就需要执行A模块的文件。一旦构建好了A模块,那么就可以从A里面取B了,如果没有就报错。

上述逻辑是如果用A,A没有载入,就执行A,否则就直接返回A的函数或者变量。这个时候就有一个问题,当前脚本Main第一次执行,需要执行from A import ,发现没有A,就新建一个A在内存中,然后填充A模块的信息,就会去执行A,此时,A里面要 from Main import D,那么因为Main已被执行,就直接从内存的map中取得Main的信息,不过此时Main的信息还没有填充完,因为之前就是为了填充才转到A的,这时从已有的空的Main中拿不到D,就会报错,ImportError。

所以,项目中尽量不要循环import,很可能会产生这样的错。那么一旦产生怎么解决?

可以把import语句尽可能往后放,比如放到文件最后,那么应该是没问题的,因为执行到import时,已经确保了当前的脚本的内容已经注册到了内存的map中。

当然也可以放到函数的内部,即其他模块的调用处。

from lib import lib1 
 
def func1(): 
 print("main.func1") 
 lib1() 
 
 
def func2(): 
 print("main.func1") 
 
func1()

main.py

from main import func2 
 
def lib1(): 
 func2() 
 print("lib.lib1") 
 
 
def lib2(): 
 func2()

lib.py

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python函数学习笔记
Oct 07 Python
Python爬虫框架Scrapy安装使用步骤
Apr 01 Python
Python中的XML库4Suite Server的介绍
Apr 14 Python
深入浅析python继承问题
May 29 Python
python的变量与赋值详细分析
Nov 08 Python
Python实现的多进程和多线程功能示例
May 29 Python
python3调用百度翻译API实现实时翻译
Aug 16 Python
对python中xlsx,csv以及json文件的相互转化方法详解
Dec 25 Python
Pytorch 实现权重初始化
Dec 31 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
Mar 18 Python
Python通过Pillow实现图片对比
Apr 29 Python
浅谈pycharm导入pandas包遇到的问题及解决
Jun 01 Python
Python中循环引用(import)失败的解决方法
Apr 22 #Python
Python 数据处理库 pandas进阶教程
Apr 21 #Python
PyQt5 QSerialPort子线程操作的实现
Apr 21 #Python
将python代码和注释分离的方法
Apr 21 #Python
Python基于百度AI的文字识别的示例
Apr 21 #Python
python实现随机调用一个浏览器打开网页
Apr 21 #Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 #Python
You might like
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
JSON在PHP中的应用介绍
2012/09/08 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
use jscript List Installed Software
2007/06/11 Javascript
javascript getElementsByTagName
2011/01/31 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
js实现简单秒表走动的时钟特效
2020/03/25 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
零基础学Python(一)Python环境安装
2014/08/20 Python
Python中一些自然语言工具的使用的入门教程
2015/04/13 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
Python 正则表达式入门(初级篇)
2016/12/07 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
Python如何使用函数做字典的值
2019/11/30 Python
python 字典访问的三种方法小结
2019/12/05 Python
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
大学自我鉴定范文
2013/12/26 职场文书
终止合同协议书范本
2016/03/22 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript
世界十大狙击步枪排行榜
2022/03/20 杂记
python中 .npy文件的读写操作实例
2022/04/14 Python