课程名称:全面系统Python3.8入门+进阶(程序员必备第二语言)
课程章节:7-9 __int__.py的用法
主讲老师:7七月
课程内容:
今天学习的内容包括:
__int__.py的用法
课程收获:
python中如何一次导入多个模块。
把c9里的变量都引入到c10内:
我们可以用逗号分隔来引用c9里面的三个变量,比我们用三行代码分别来引入变量来说是要方便很多的。
特殊情况:加入我们要从c9里导入的变量特别多:
python简易一行里面的字符是不超过80个。这就涉及到代码换行的问题。
在上一行的末尾加上\
但是\就有点突兀,推荐大家使用在导入变量的外部加一对括号。
from c9 import (a, b, c) print(a,b,c)
上面代码中的括号,不仅可以用在变量导入上,括号他本身是有类括性的,也具有连接性,所以你再函数里也可以利用括号的特性来换行。
包:
一个包下面应该是有一个__init__.py的文件的,如果没有这个文件那么这就是普通文件夹。到目前课程里还没有使用过这个init这个文件,他的最基本作用:当一个包被导入的时候,init文件会首先被执行。而且是被python自动的去执行。不需要手动输入命令去执行。
我们可以看到当我们运行t下面的c11时候,打印了'This is __init__.py file'这段在__init__.py里的代码。可以看到我们并没有运行init文件,而是只运行了c11.py。
包的这种机制是非常实用的,我们在真实场景下,通常我们会在init文件里去做一些包和模块的初始化工作。
以上为导入seven包下c7.py模块内的变量。所以无论你是导入包,还是导入包下模块变量,python都会自动的帮你运行init文件内的代码。
init文件应用场景:
在init里也可以通过all来决定哪些变量会被导出。
c7里定义了三个变量,c8里也定义了三个变量。现在我们通过init文件里的all变量来做个限制,在init文件使用__all__ = ['c7']。然后在c11文件里键入代码from t import *
以上代码中c11的导入代码中有*,他的定义就是他会把这个t包下面的所有模块的所有变量都会导入。
我们键入2行打印代码后看。
print(c7.a)
print(c8.e)
执行结果:2是被成功打印出来,但是错误提示c8是没有被定义的。这就是我们init里面的all变量在起作用,由于我们init文件只定义了c7,所以如果你想通过c11里的*导入整个包下面模块的时候,他只会让你把c7导入,由于c8是没有定义的。所以c8是不可以在这里来引用的。
init另外一个作用,我们可以利用他来做批量导入。
我们在c12,c13等模块里都要引用相同的库。就非常的麻烦,因为你每一个用到这些库的时候都需要在当前模块的顶部重复使用import来引用。那怎么解决呢?
我们把C13里面import里的内容,放到seven包里的init文件里。让init文件来import这三个库。同时c12里也删除掉。
此时我们在c12,c13顶部输入import t。
运行c13后我们看到有提示报错,sys没有被找到。原因并不是init没有导入sys,而是在于这个t他是一个包,我们是在t的包下面导入的sys,所以我们必须在sys前面加上t。
上面批量导入,他好在什么地方?当我们有多个模块需要引入几十个库的时候,就能提现出效率和便捷。你只需要在模块里面引入一个包,包就会自动执行init文件。