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制作简单的钢琴程序的教程
Apr 01 Python
简单介绍Python中的readline()方法的使用
May 24 Python
Python线程详解
Jun 24 Python
PyCharm使用教程之搭建Python开发环境
Jun 07 Python
使用Python进行二进制文件读写的简单方法(推荐)
Sep 12 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
python3 打开外部程序及关闭的示例
Nov 06 Python
pyshp创建shp点文件的方法
Dec 31 Python
django 取消csrf限制的实例
Mar 13 Python
浅析python 字典嵌套
Sep 29 Python
Python实现七个基本算法的实例代码
Oct 08 Python
python opencv实现图像配准与比较
Feb 09 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
2015/11/30 PHP
深入了解PHP中的Array数组和foreach
2016/11/06 PHP
页面版文本框智能提示JS代码
2009/11/20 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
2016/05/05 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
python类装饰器用法实例
2015/06/04 Python
查看django版本的方法分享
2018/05/14 Python
python找出完数的方法
2018/11/12 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
html5 Canvas实现图片旋转的示例
2018/01/15 HTML / CSS
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
澳大利亚在线高跟鞋商店:Shoe Me
2019/11/19 全球购物
技术副厂长岗位职责
2013/12/26 职场文书
英语课外活动总结
2014/08/27 职场文书
会计工作总结范文2014
2014/12/23 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python