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中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
python爬虫headers设置后无效的解决方法
Oct 21 Python
用Python写一段用户登录的程序代码
Apr 22 Python
浅谈Series和DataFrame中的sort_index方法
Jun 07 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
python redis 删除key脚本的实例
Feb 19 Python
深入解析神经网络从原理到实现
Jul 26 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
离线状态下在jupyter notebook中使用plotly实例
Apr 24 Python
解决Python数据可视化中文部分显示方块问题
May 16 Python
Pandas对每个分组应用apply函数的实现
Dec 13 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查询域名状态whois的类
2006/11/25 PHP
php限制ip地址范围的方法
2015/03/31 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
laravel validate 设置为中文的例子(验证提示为中文)
2019/09/29 PHP
js parsefloat parseint 转换函数
2010/01/21 Javascript
js几个验证函数代码
2010/03/25 Javascript
jQuery CSS()方法改变现有的CSS样式表
2014/09/09 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
深入浅出讲解ES6的解构
2016/08/03 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
2018/06/14 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
python使用urllib2模块获取gravatar头像实例
2013/12/18 Python
浅谈Python单向链表的实现
2015/12/24 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
Python3实现的判断环形链表算法示例
2019/03/07 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
基于python3的socket聊天编程
2020/02/17 Python
python爬取天气数据的实例详解
2020/11/20 Python
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
计算机专业个人求职自荐信
2013/09/21 职场文书
毕业生找工作的自我评价
2013/10/18 职场文书
做一个有道德的人活动实施方案
2014/08/23 职场文书
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技