__init__.py的用法

#seven 包
#t  包

  

__init__.py的基本作用一:当一个包被导入的时候,那么__init__.py文件将首先被执行,而且是被python自动的去执行。

例:

在t包的 __init__.py文件里定义一个变量

a='This is __init__.py file'
print(a)

  

在seven包新建模块c11.py,在c11.py写入代码

import t

在终端运行c11.py结果:<<<This is __init__.py file

 

包的机制非常有用在项目中通常会在__init__.py里面做包和模块的初始化工作,这个是她的应用场景。

 

思考如果导入的不是t包,而是t下面的模块或者是模块下面的某一个变量__init__.py文件会自动运行吗?

t包下定义一个模块c7.py

__all__=['a','c']

a=2
c=3
d=4

  

我们在c11.py中换一种写法:

from t.c7 import a

在终端运行c11.py结果:<<< This is __init__.py file  

所以说无论是导入的包还是导入的包下面的某一个模块的变量python都会自动的运行__init__.py文件

 

 在__init__.py文件中同样可以运用__all__内置变量哪些变量被导出

 在t包下面定义模块c8.py

e=2
f=3
g=4

在__init__.py写入

__all__=['c7']

在终端运行c11.py结果:

2
Traceback (most recent call last):
File "c11.py", line 3, in <module>
print(c8.e)
NameError: name 'c8' is not defined

是因为__init__.py   __all__变量起了作用,由于我们的__init__.py文件只定义了c7,如果想通过* 导入包下面的模块

只会导入c7,c8没有定义,所以c8是不可以引用的。

 

__init__.py的作用二:批量导入。

在seven包下面新建模块c12

import sys
import datetime
import io
print(sys.path)

在seven包下面新建模块c13

import sys
import datetime
import io
print(sys.path)

 

假如说在c12中引入这三个库,在c13中也要引入,c14 c15等等很多个模块都要引入,在每个模块下面都import

是非常麻烦的。

在__init__.py文件下写入

import sys
import datetime
import io

我们删除c12.py 和c13.py 代码中的引入模块

import sys
import datetime
import io

c12.py 和c13.py 的代码print(sys.path) 是不会被打印的,原因是因为没有被定义。

 

此时想打印print(sys.path)没有必要再引入那三个库。

 

例:

在c13.py中写入代码import t 

import t
print(t.sys.path)

 

我们在平时编码里面如有一个系统思维,这样的机制是使用非常多的。

 

转载于:https://www.cnblogs.com/Whambang/p/8006667.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值