2.1 了解包
包是将模块结构化到目录中的一种方式。
包是一个目录,其中包含文件
__init__.py
和一个或多个模块。文件
__init__.py
可以是空的或者包含包的初始化代码。
包/目录结构示例
mypackage/
__init__.py
module1.py
module2.py
__init__.py 文件内容 |
---|
|
module1.py 文件内容 |
---|
|
module2.py 文件内容 |
---|
|
使用该包函数的代码示例:
import mypackage
print(mypackage.func1()) # 输出: Function 1
print(mypackage.func2()) # 输出: Function 2
接下来让我们尝试写自己的包,并顺便看看其他人是怎么做的。
2.2 按步骤创建自己的包
步骤 1:创建包的结构
第一步是为你的包创建目录和文件结构。我们将以 mypackage
为例,其中包含两个模块:
module1.py
和 module2.py
。
包结构示例:
mypackage/
__init__.py
module1.py
module2.py
文件描述:
-
__init__.py
:这个文件可以是空的,也可以包含包的初始化代码。它告诉 Python 将目录视为包。 -
module1.py
和module2.py
:这些文件包含你想在包中包含的函数、类和变量。
步骤 2:为模块编写代码
为我们的模块编写简单的代码。
module1.py
def func1():
return "Function 1 from module1"
module2.py
def func2():
return "Function 2 from module2"
__init__.py
为了在包级别导入模块中的函数,我们将它们添加到 __init__.py
中。
from .module1 import func1
from .module2 import func2
现在,当你导入包时,函数 func1
和 func2
可以直接使用。
步骤 3:测试包
在与 mypackage
目录相同的目录中新建文件 test.py
,并在该文件中使用包进行测试。
test.py
import mypackage
print(mypackage.func1()) # 输出: Function 1 from module1
print(mypackage.func2()) # 输出: Function 2 from module2
运行 test.py
以确保你的包正常工作。
2.3 使用 dir()
函数
当你导入模块或包时,可以使用
dir()
函数 获取该模块中所有可用的属性和方法的列表。这在你使用新模块或不熟悉的模块时非常有用,帮助你快速了解它提供了哪些函数和类。
示例:研究标准模块 math
下面是使用 dir()
来研究标准模块 math
的示例。
import math
print(dir(math))
这段代码导入模块 math
并输出所有可用属性和方法的列表。结果大概是这样的:
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan',
'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1',
'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf',
'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod',
'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
这个列表包含了模块 math
中定义的所有函数和常量,比如 sin
、cos
、tan
、pi
等。
对自定义模块使用 dir()
你也可以对自定义(自己的)模块使用 dir()
。假设你有一个包含以下内容的文件 mymodule.py
:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
你可以导入该模块并使用 dir()
来研究其内容:
import mymodule
print(dir(mymodule))
结果如下:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__',
'greet', 'pi']
列表包括模块 mymodule
的8个内置属性(以双下划线包围),最后是你的方法 greet
和变量 pi
。
GO TO FULL VERSION