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算法学习之计数排序实例
Dec 18 Python
python执行get提交的方法
Apr 29 Python
python爬取w3shcool的JQuery课程并且保存到本地
Apr 06 Python
Pycharm学习教程(7)虚拟机VM的配置教程
May 04 Python
利用Python在一个文件的头部插入数据的实例
May 02 Python
了解不常见但是实用的Python技巧
May 23 Python
opencv3/python 鼠标响应操作详解
Dec 11 Python
python中property和setter装饰器用法
Dec 19 Python
Django-migrate报错问题解决方案
Apr 21 Python
Python使用matplotlib绘制圆形代码实例
May 27 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 Python
python 判断字符串当中是否包含字符(str.contain)
Jun 01 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加密函数 Javascript/Js 解密函数
2013/09/23 PHP
php中socket的用法详解
2014/10/24 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
javascript demo 基本技巧
2009/12/18 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
JavaScript中的prototype.bind()方法介绍
2014/04/04 Javascript
用js一次改变多个input的readonly属性值的方法
2014/06/11 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
ES6概念 ymbol.for()方法
2016/12/25 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
2017/08/23 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
简单了解JavaScript作用域
2020/07/31 Javascript
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
Python获取SQLite查询结果表列名的方法
2017/06/21 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
英国户外服装品牌:Craghoppers
2019/04/25 全球购物
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
销售经理岗位职责
2014/03/16 职场文书
海洋天堂观后感
2015/06/05 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang
一文弄懂MySQL索引创建原则
2022/02/28 MySQL
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server
Android Studio 计算器开发
2022/05/20 Java/Android