hand
_1_5_104
4
返回栏目
1k
9k
1k
1k
5k
1k
1k
1k
1k
3k
2k
1k
0.8k
2k
3k
1k
1k
0.7k
0.9k
1k
0.6k
0.4k
0.4k
0.3k
3k
2k
9k
0.4k
0.4k
0.8k
0.5k
3k
5k
1k
2k
2k
3k
5k
1k
1k
0.4k
0.5k
0.4k
0.6k
0.7k
1k
0.4k
0.3k
4k
0.5k
0k
0.3k
0k
0.2k
0.2k
0.3k
0.9k
0.9k
0.1k
0.9k
0.9k
1k
0.5k
6k
0.3k
0.4k
0.7k
0.6k
8k
3k
1k
1k
1k
1k
0k
2k
1k
1k
0.2k
5k
4k
5k
0.4k
0.8k
1k
1k
1k
0.1k
2k
1k
2k
6k
0k
2k
7k
1k
5k
2k
3k
1k
0k
1k
0.9k
0.4k
0.2k
1k
3k
4k
1k
1k
1k
2k
3k
0.7k
0.3k
0.5k
0.6k
1k
0.9k
3k
0.3k
4k
返回python栏目
作者:
贺及楼
成为作者
更新日期:2024-10-27 12:06:02
导入包的时候会被隐式执行__init__.py
是一个特殊的 Python 文件,用于将一个目录标记为 Python 的包。
用法 | 作用 |
---|---|
当一个目录中包含 __init__.py 文件时 |
Python 解释器会将其视为一个包,允许你使用 import 语句导入包内的模块。 |
这个文件可以为空 | 也可以定义包的初始化代码,例如初始化数据、设置包级别的变量或定义包的命名空间。 |
定义 __all__ __init__.py 文件允许你控制包的导入行为 |
列表来指定当使用 from package import * 时应该导入哪些模块。 |
__init__.py 文件还可以用来执行包级别的初始化操作 |
比如注册钩子函数、设置日志配置等。 |
随着 Python 3.3 的发布,引入了隐式命名空间包(INP),这种类型的包不需要 __init__.py
文件,但 __init__.py
仍然有其用途,特别是在需要执行包初始化代码或明确定义包结构时。
可以没有作用
|--arithmetic ---python包
|--|--__init__.py ---导入
|--|--add.py
|--|--sub.py
|--|--mul.py
|--|--dev.py
## @file add.py
def add(a, b):
return a + b
## @file sub.py
def sub(a, b):
return a - b
## @file mul.py
def mul(a, b):
return a * b
## @file dev.py
def dev(a, b):
return a / b
整理前:
## @file main.py
## import 了好多包
import arithmetic.add
import arithmetic.sub as sub
from arithmetic.mul import mul
from arithmetic import dev
def letscook(x, y, oper):
r = 0
if oper == "+":
r = arithmetic.add.add(x, y)
elif oper == "-":
r = sub.sub(x, y)
elif oper == "*":
r = mul(x, y)
else:
r = dev.dev(x, y)
print("{} {} {} = {}".format(x, oper, y, r))
x, y = 3, 8
letscook(x, y, "+")
letscook(x, y, "-")
letscook(x, y, "*")
letscook(x, y, "/")
整理后:
## @file main.py
import arithmetic as a4
def letscook(x, y, oper):
r = 0
if oper == "+":
r = a4.add(x, y)
elif oper == "-":
r = a4.sub(x, y)
elif oper == "*":
r = a4.mul(x, y)
else:
r = a4.dev(x, y)
print("{} {} {} = {}".format(x, oper, y, r))
x, y = 3, 8
letscook(x, y, "+")
letscook(x, y, "-")
letscook(x, y, "*")
letscook(x, y, "/")
## @file __init__.py
import arithmetic.add
import arithmetic.sub
import arithmetic.mul
import arithmetic.dev
add = arithmetic.add.add
sub = arithmetic.sub.sub
mul = arithmetic.mul.mul
dev = arithmetic.dev.dev
在模糊导入时,形如from package import *,*是由__all__定义的。
__all__是一个重要的变量,用来指定此包(package)被import *时,哪些模块(module)会被import进【当前作用域中】。
不在__all__列表中的模块不会被其他程序引用。
可以重写__all__,如__all__= ['当前所属包模块1名字', '模块1名字'],如果写了这个,则会按列表中的模块名进行导入
## a.py
def add(x, y):
return x + y
def subtract(x, y):
return x - y
## __init__.py
from .a import add, subtract
__all__ = ['add']
表示add方法包含了,subtract方法没有包含
python
整章节共122节
快分享给你的小伙伴吧 ~