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深入学习之装饰器
Aug 31 Python
python对html代码进行escape编码的方法
May 04 Python
收藏整理的一些Python常用方法和技巧
May 18 Python
解读python如何实现决策树算法
Oct 11 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
基于django传递数据到后端的例子
Aug 16 Python
appium+python adb常用命令分享
Mar 06 Python
python高级特性简介
Aug 13 Python
python使用布隆过滤器的实现示例
Aug 20 Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 Python
教你怎么用Python实现多路径迷宫
Apr 29 Python
Python图片检索之以图搜图
May 31 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
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
python根据京东商品url获取产品价格
2015/08/09 Python
简单了解Django模板的使用
2017/12/20 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
python命令行参数用法实例分析
2019/06/25 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
本科生个人求职自荐信
2013/09/26 职场文书
档案管理员岗位职责
2013/12/01 职场文书
建筑投标担保书
2014/05/20 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
感谢信格式范文
2015/01/22 职场文书
2015双创工作总结
2015/07/24 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang
Python进行区间取值案例讲解
2021/08/02 Python
Python何绘制带有背景色块的折线图
2022/04/23 Python
Python中tqdm的使用和例子
2022/09/23 Python