CodeGym /Java 课程 /Python SELF ZH /创建自己的包

创建自己的包

Python SELF ZH
第 19 级 , 课程 1
可用

2.1 了解包

包是将模块结构化到目录中的一种方式。 包是一个目录,其中包含文件 __init__.py 和一个或多个模块。文件 __init__.py 可以是空的或者包含包的初始化代码。

包/目录结构示例


mypackage/
    __init__.py
    module1.py
    module2.py
__init__.py 文件内容

# __init__.py
from .module1 import func1
from .module2 import func2
module1.py 文件内容

# module1.py
def func1():
    return "Function 1"
module2.py 文件内容

# module2.py
def func2():
    return "Function 2"

使用该包函数的代码示例:


import mypackage

print(mypackage.func1())  # 输出: Function 1
print(mypackage.func2())  # 输出: Function 2

接下来让我们尝试写自己的包,并顺便看看其他人是怎么做的。

2.2 按步骤创建自己的包

步骤 1:创建包的结构

第一步是为你的包创建目录和文件结构。我们将以 mypackage 为例,其中包含两个模块: module1.pymodule2.py

包结构示例:


mypackage/
    __init__.py
    module1.py
    module2.py

文件描述:

  • __init__.py:这个文件可以是空的,也可以包含包的初始化代码。它告诉 Python 将目录视为包。
  • module1.pymodule2.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

现在,当你导入包时,函数 func1func2 可以直接使用。

步骤 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 中定义的所有函数和常量,比如 sincostanpi 等。

对自定义模块使用 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

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION