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 相关文章推荐
pycharm 使用心得(四)显示行号
Jun 05 Python
一个超级简单的python web程序
Sep 11 Python
Python实现的多线程端口扫描工具分享
Jan 21 Python
Python中线程编程之threading模块的使用详解
Jun 23 Python
Python中的if、else、elif语句用法简明讲解
Mar 11 Python
Python中py文件引用另一个py文件变量的方法
Apr 29 Python
python抓取需要扫微信登陆页面
Apr 29 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
python实现UDP协议下的文件传输
Mar 20 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
Aug 07 Python
详解用python -m http.server搭一个简易的本地局域网
Sep 24 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
Apr 28 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 保留字列表
2012/10/04 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
Jquery 点击按钮自动高亮实现原理及代码
2014/04/25 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
2015/02/03 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
利用prop-types第三方库对组件的props中的变量进行类型检测
2017/05/02 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
2019/05/13 Javascript
浅析我对JS延迟异步脚本的思考
2020/10/12 Javascript
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
Python计算程序运行时间的方法
2014/12/13 Python
Python yield与实现方法代码分析
2018/02/06 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
Python中如何添加自定义模块
2020/06/09 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
儿媳婚宴答谢词
2014/01/14 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
小学家长学校培训材料
2014/08/24 职场文书
旷工辞退通知书
2015/04/17 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python