为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第19天Python第七章包、模块、函数与变量作用域

标签:
Python

课程名称:全面系统Python3.8入门+进阶(程序员必备第二语言)

课程章节:7-9 __int__.py的用法

主讲老师:7七月

课程内容:

今天学习的内容包括:

__int__.py的用法

课程收获:

python中如何一次导入多个模块。

把c9里的变量都引入到c10内:

https://img1.sycdn.imooc.com//632ca5f40001cd6c12940275.jpg

我们可以用逗号分隔来引用c9里面的三个变量,比我们用三行代码分别来引入变量来说是要方便很多的。

特殊情况:加入我们要从c9里导入的变量特别多:

https://img1.sycdn.imooc.com//632ca6010001f76d08840182.jpg

python简易一行里面的字符是不超过80个。这就涉及到代码换行的问题。

在上一行的末尾加上\

https://img1.sycdn.imooc.com//632ca60b0001178d11480695.jpg

但是\就有点突兀,推荐大家使用在导入变量的外部加一对括号。

from c9 import (a, b, 
c)
print(a,b,c)

https://img1.sycdn.imooc.com//632ca61a0001a38811800666.jpg

上面代码中的括号,不仅可以用在变量导入上,括号他本身是有类括性的,也具有连接性,所以你再函数里也可以利用括号的特性来换行。

包:

一个包下面应该是有一个__init__.py的文件的,如果没有这个文件那么这就是普通文件夹。到目前课程里还没有使用过这个init这个文件,他的最基本作用:当一个包被导入的时候,init文件会首先被执行。而且是被python自动的去执行。不需要手动输入命令去执行。

https://img1.sycdn.imooc.com//632ca6250001d00321290671.jpg

我们可以看到当我们运行t下面的c11时候,打印了'This is  __init__.py file'这段在__init__.py里的代码。可以看到我们并没有运行init文件,而是只运行了c11.py。

包的这种机制是非常实用的,我们在真实场景下,通常我们会在init文件里去做一些包和模块的初始化工作。

https://img1.sycdn.imooc.com//632ca62e0001d47215220721.jpg

以上为导入seven包下c7.py模块内的变量。所以无论你是导入包,还是导入包下模块变量,python都会自动的帮你运行init文件内的代码。

init文件应用场景:

在init里也可以通过all来决定哪些变量会被导出。

c7里定义了三个变量,c8里也定义了三个变量。现在我们通过init文件里的all变量来做个限制,在init文件使用__all__ = ['c7']。然后在c11文件里键入代码from t import *

https://img1.sycdn.imooc.com//632ca63800018cbd13000603.jpg

以上代码中c11的导入代码中有*,他的定义就是他会把这个t包下面的所有模块的所有变量都会导入。

我们键入2行打印代码后看。

print(c7.a)

print(c8.e)

https://img1.sycdn.imooc.com//632ca6450001b76d19561259.jpg

执行结果:2是被成功打印出来,但是错误提示c8是没有被定义的。这就是我们init里面的all变量在起作用,由于我们init文件只定义了c7,所以如果你想通过c11里的*导入整个包下面模块的时候,他只会让你把c7导入,由于c8是没有定义的。所以c8是不可以在这里来引用的。

init另外一个作用,我们可以利用他来做批量导入。

我们在c12,c13等模块里都要引用相同的库。就非常的麻烦,因为你每一个用到这些库的时候都需要在当前模块的顶部重复使用import来引用。那怎么解决呢?

https://img1.sycdn.imooc.com//632ca6500001417c21571355.jpg

我们把C13里面import里的内容,放到seven包里的init文件里。让init文件来import这三个库。同时c12里也删除掉。

此时我们在c12,c13顶部输入import t。

https://img1.sycdn.imooc.com//632ca65a0001dcc821571355.jpg

运行c13后我们看到有提示报错,sys没有被找到。原因并不是init没有导入sys,而是在于这个t他是一个包,我们是在t的包下面导入的sys,所以我们必须在sys前面加上t。

https://img1.sycdn.imooc.com//632ca6660001292821571355.jpg

上面批量导入,他好在什么地方?当我们有多个模块需要引入几十个库的时候,就能提现出效率和便捷。你只需要在模块里面引入一个包,包就会自动执行init文件。


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消