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实现windows下的抓包与解析
Jan 15 Python
python3+PyQt5实现自定义窗口部件Counters
Apr 20 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
May 25 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
python与mysql数据库交互的实现
Jan 06 Python
Python xlrd excel文件操作代码实例
Mar 10 Python
django迁移文件migrations的实现
Mar 31 Python
PyCharm 在Windows的有用快捷键详解
Apr 07 Python
使用Python实现批量ping操作方法
May 06 Python
Python txt文件常用读写操作代码实例
Aug 03 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
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
PHP简单实现合并2个数字键数组值的方法
2017/05/30 PHP
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
Javascript非构造函数的继承
2015/04/27 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
详解JavaScript中的表单验证
2015/06/16 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
python中dir函数用法分析
2015/04/17 Python
python中lambda与def用法对比实例分析
2015/04/30 Python
Python中random模块用法实例分析
2015/05/19 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
serialVersionUID具有什么样的特征
2014/02/20 面试题
利用ajax+php实现商品价格计算
2021/03/31 PHP
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js
python Django框架快速入门教程(后台管理)
2021/07/21 Python