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 相关文章推荐
matplotlib调整子图间距,调整整体空白的方法
Aug 03 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
Jan 06 Python
使用python 的matplotlib 画轨道实例
Jan 19 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
Aug 26 Python
python 实现学生信息管理系统的示例
Nov 28 Python
django中cookiecutter的使用教程
Dec 03 Python
Django url 路由匹配过程详解
Jan 22 Python
一文搞懂如何实现Go 超时控制
Mar 30 Python
python如何做代码性能分析
Apr 26 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
Jun 05 Python
教你用Python matplotlib库制作简单的动画
Jun 11 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实现学生管理系统
2020/03/21 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
javascript call方法使用说明
2010/01/11 Javascript
点击进行复制的JS代码实例
2013/08/23 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
js实现拖拽上传图片功能
2017/08/01 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
vue-router传递参数的几种方式实例详解
2018/11/13 Javascript
angular 服务随记小结
2019/05/06 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
JS实现横向跑马灯效果代码
2020/04/20 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
梳理一下vue中的生命周期
2020/12/30 Vue.js
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
人力资源管理专业应届生求职信
2013/09/28 职场文书
会计学个人自荐信模板
2013/12/13 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
储备店长岗位职责
2015/04/14 职场文书
夏洛特的网观后感
2015/06/15 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server