首页 > 编程语言 >【python】循环import 及 import过程

【python】循环import 及 import过程

时间:2022-11-11 12:06:19浏览次数:40  
标签:func1 main python 循环 内存 模块 import Main


最近项目组用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



标签:func1,main,python,循环,内存,模块,import,Main
From: https://blog.51cto.com/u_15873544/5844099

相关文章

  • 【Thrift】python 例子
    serviceMyService{stringget()}importsocketimportsyssys.path.append('./gen-py')fromhelloworldimportMyServicefromhelloworld.ttypesimport*fromthrift.tr......
  • python 小脚本
    1.乘法口诀表foriinrange(1,10):forjinrange(1,i+1):ji=i*jprint("{}*{}={}".format(i,j,ji),end='\t')print()2.11点游戏'......
  • 一个简单的步骤让你的 Python 代码更干净
    说起来容易做起来难,我们都知道代码可读性非常重要,但是写的时候总是随心所欲,不考虑类型提示、import排序、PEP8规范。今天分享一个小技巧,通过一个简单的步骤就可以让你的......
  • 老版本Python3.6 安装踩坑
    因业务需要安装老版本的python3.6.7,当前系统默认的python2.7brew安装的3.7 brew回退安装3.6.*版本的方式,网络上有很多。比较靠谱的可以用官网方式安装,见 ​​ht......
  • python和shell产生随机密码,哪个更方便
    一、Python#@File:生成随机密码.py#@desc:importstringimportrandom####侯选all_words=list(string.ascii_lowercase+string.ascii_uppercase+string.digits......
  • 【Linux】Ubuntu 18.04 Python修改 pip源为阿里源
    1.在home/用户名/目录下创建.pip文件夹cd~mkdir.pipcd~/.piptouchpip.conf2.编辑pip.conf文件,输入以下内容保存即可[global]trusted-host=mirrors.ali......
  • python語音播報
    安装pipinstallpyttsx3pipinstallpydub代碼#语音播报模块importpyttsx3#aiff文件转换成mp3编码文件模块frompydubimportAudioSegment#模块初始化......
  • 新的学习历程-python4 input
    1num=input("请输入数字:")#input用于录入键盘输入2print(num)3print(type(num))#input获取到数据类型是字符类型45print(num+10)#报错,不能把字符和数字作......
  • @import 与link的区别
    1.link是xhtml标签,除了可以加载css外,还可以定义RSS其他事物;@import属于css范畴,只能加载css2.link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。......
  • 如何只获取当前项目中的python依赖包?
    我们都知道获取环境中的所有依赖包命令:pipfreeze>./requirements.txt但是,如果我们仅仅想获取当前项目中的安装包,我们可以使用pipreqs工具安装:pipinstallpipreq......