脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python学习基础之循环import及import过程

python学习基础之循环import及import过程

2021-02-04 00:11绝世好阿狸 Python

python中的import语句是用来导入模块的,下面这篇文章主要给大家介绍了关于python学习基础之循环import及import过程的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

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中。

当然也可以放到函数的内部,即其他模块的调用处。

?
1
2
3
4
5
6
7
8
9
10
11
from lib import lib1
 
def func1():
 print("main.func1")
 lib1()
 
 
def func2():
 print("main.func1")
 
func1()

main.py

?
1
2
3
4
5
6
7
8
9
from main import func2
 
def lib1():
 func2()
 print("lib.lib1")
 
 
def lib2():
 func2()

lib.py

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。

原文链接:https://blog.csdn.net/u010900754/article/details/75089682

延伸 · 阅读

精彩推荐