【python】循环import 及 import过程
来源:互联网 发布:qq群刷屏软件 编辑:程序博客网 时间:2024/05/29 19:53
最近项目组用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 lib1def func1(): print("main.func1") lib1()def func2(): print("main.func1")func1()main.py
from main import func2def lib1(): func2() print("lib.lib1")def lib2(): func2()
lib.py
阅读全文
0 0
- 【python】循环import 及 import过程
- Python的import过程
- python import、from import
- Python import
- Python import
- Python import
- Python import
- python import
- python import
- Python-import
- Python import
- Python import
- python:import
- python import
- python import
- Python Gossip: import、import as、from import
- python import 与from ... import
- 【Python】import class/import module
- Android:可复制的TextView、EditText,复制文字到剪贴板
- mysql通过binlog恢复数据的几种情况
- POJ 2955 Brackets 【区间dp】【水题】
- 【二叉树】最大路径和【124. Binary Tree Maximum Path Sum】
- Android系统广播实现短信监听
- 【python】循环import 及 import过程
- Hdu 5961 传递【暴力枚举】
- java 堆跟栈
- 踩坑之后对于对象与数组深度复制的总结
- 开个csdn博客
- JAVA基础回顾-自定义注解
- 抓取Momentum图片
- Springboot通过cors解决跨域问题(解决spring security oath2的/oauth/token跨域问题)
- Oracle中的时间函数用法(to_date、to_char) (总结)