MEMOO
MEMOO
Published on 2025-04-20 / 2 Visits
0
0

Python模块

摘要:在本教程中,你将学习有关 Python 模块的知识、如何从模块中导入对象,以及如何开发自己的模块。

Python 模块简介

模块是具有特定功能的软件片段,Python 模块是一个包含 Python 代码的文件。

例如,在构建购物车应用程序时,你可以有一个用于计算价格的模块,另一个用于管理购物车中商品的模块。每个模块都是一个独立的 Python 源代码文件。

模块的名称由文件名(去掉 .py 扩展名)指定。例如,如果你有一个名为 pricing.py 的文件,那么模块名就是 pricing

编写 Python 模块

首先,创建一个名为 pricing.py 的新文件,并添加以下代码:

# pricing.py

def get_net_price(price, tax_rate, discount=0):
    discounted_price = price * (1 - discount) 
    net_price = discounted_price * (1 + tax_rate) 
    return net_price


def get_tax(price, tax_rate=0):
    return price * tax_rate

pricing 模块包含两个函数,这两个函数可以根据售价、税率和折扣来计算净价和税额。

导入模块对象

若要在另一个文件中使用模块中定义的对象,可以使用 import 语句。

import 语句有多种形式,我们将在接下来的部分中进行讨论。

import <module_name>

若要使用模块中定义的对象,需要使用以下 import 语句导入该模块:

import module_name

例如,若要在 main.py 文件中使用 pricing 模块,可使用以下语句:

import pricing

导入模块时,Python 会执行对应文件中的所有代码。在此示例中,Python 会执行 pricing.py 文件中的代码。此外,Python 还会将模块名添加到当前模块中。

该模块名允许你在当前模块中访问导入模块中的函数、变量等。

例如,你可以使用以下语法调用导入模块中定义的函数:

module_name.function_name()

以下展示了如何在 main.py 文件中使用 pricing 模块中定义的 get_net_price() 函数:

# main.py
import pricing


net_price = pricing.get_net_price(
    price=100,
    tax_rate=0.01
)

print(net_price)

输出:

101.0

import <module_name> as new_name

如果你不想在 main.py 中使用 pricing 作为标识符,你可以将模块名重命名为其他名称,如下所示:

import pricing as selling_price

然后你可以在 main.py 中用重命名后的模块名selling_price作为标识符:

net_price = selling_price.get_net_price(
    price=100,
    tax_rate=0.01
)

from <module_name> import <name>

如果你想在引用模块中的对象时不加模块名前缀,可以使用以下语法显式导入它们:

from module_name import fn1, fn2


现在,你可以像这样使用导入的函数,而无需指定模块名:

fn1()
fn2()

这个示例从 pricing 模块中导入了 get_net_price() 函数:

# main.py
from pricing import get_net_price

并使用 pricing 模块中的 get_net_price() 函数:

# main.py
from pricing import get_net_price

net_price = get_net_price(price=100, tax_rate=0.01)
print(net_price)

可以使用以下导入语句将导入的名称重命名为另一个名称:

from <module_name> import <name> as <new_name>

以下示例将 pricing 模块中的 get_net_price() 函数重命名为 calculate_net_price() 函数:

from <module_name> import *:从模块中导入所有对象

要导入模块中的所有对象,可以使用以下语法:

from module_name import *

import 语句会将模块中的所有公有标识符(包括变量、常量、函数、类等)导入到程序中。

然而,这并不是一个好的做法,因为如果导入的模块中存在相同的对象,那么第二个模块中的对象会覆盖第一个模块中的对象,这可能会导致程序无法按照预期运行。

让我们来看下面的示例。

首先,创建一个名为 product.py 的新文件,并定义 get_tax() 函数:

# product.py
def get_tax(price):
    return price * 0.1

product 模块和 pricing 模块都包含 get_tax() 函数。不过product 模块中的 get_tax() 函数只有一个参数,而 pricing 模块中的 get_tax() 函数有两个参数。

其次,从 pricing 模块和 product 模块中导入所有对象,并使用 get_tax() 函数:

from pricing import *
from product import *

tax = get_tax(100)
print(tax)

由于 product 模块中的 get_tax() 函数覆盖了 pricing 模块中的 get_tax() 函数,因此你得到的税额值为 10。

总结

  • 模块是一个扩展名为 .py 的 Python 源代码文件。模块名是去掉扩展名后的 Python 文件名。

  • 要使用模块中的对象,可以使用 import 语句导入它们。


Comment