ALT+回车可以快捷键导包导模块
一、导入模块后的类,方法,属性的调用
1.皆可以用import 模块名
模块名.方法\类名\属性来调用
2.也可以通过from模块名 import 类\方法\变量
此时调用时可直接调用导入的类\方法\变量,不用通过模块名.方法\类名\属性来调用。
3.可以使用 from 模块名 import *的方式把模块里的所有东西导入
注意:模块中是可以通过 __all__=[]来限制*所取到的值。有时import*时导入的并不是所有属性而是__all__列表中所拥有的值。
4.当导模块时,会加载模块中要用的东西到内存,所以模块中的执行语句会执行。所以当导模块时不希望模块中的执行语句执行,要把执行语句放在 if __name__=='__main__':中
二、python的包
为能够创建同名的模块,可以用到包,在不同包中可以创建同名的模块。
在pycharm编译器中,创建文件夹和创建包是有区别的。
1.非py文件可放入文件夹,包里都是py文件
2.只要在文件夹下创建一个__init__.py文件,文件夹就变成了包
3.包创建使要遵循命名规范,字母数字下划线。
4.from 包名 import 模块名,使用模块内的东西时需要通过模块名.属性来调用
5.也可以通过 from 包名.模块名 import 属性 来方便使用
6.在同一包下的模块,也不能直接import这个模块,要使用from 包名.模块名 import *来使用
7.在同一包下的模块,可以通过 from .模块 来导入这个模块(类似于相对路径)(这个.代表当前目录)
8.在同一项目下,不同包的模块也可以直接通过from包名import模块来导入这个模块,因为这个搜寻都是基于这一项目开始查找,不同项目才可以通过os.chdir或sys.path.append来添加路径来导包。
三、包的__init__
只要有导包就会默认调用包的__init__文件
此时默认初始化加载__init__.py,若__init__.py文件中有方法或类,那么py内存中已经加载这些东西,可以直接通过包名.方法()来调用。
当需要用到from 包名 import *时 ,平常的理解是导包内的所有东西,但实际是若包的__init__不加__all__=【】来限定*中的东西,什么东西都导不进来,需要添加__all__列表,列表中的东西可通过from 包名 import *来导入。
from 模块名 import * 与 from 包名 import * 的区别:
导模块的*代表能导入模块中的所有属性,__all__限制了往里面导的东西
而导包的*代表能导入__all__中的东西,并不是全部东西。
四、模块的循环导入
'''
我调你,你调我的情况
A:模块A
def a():
c()
C: 模块C
def c():
a()
'''
在大型python项目中,由于架构不当,可能造成互相调用的情况导致程序不能正常运行。
可以通过把导模块操作放入函数体内,需要使用时再导包,使另一模块需要使用的方法成功加载内存即可。