Python入门教程第63篇 模块

Posted 不剪发的Tony老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门教程第63篇 模块相关的知识,希望对你有一定的参考价值。

本篇我们将会介绍 Python 中模块(module)的概念,如何从模块中导入对象,以及如何开发自己的模块。

模块

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

例如,在开发一个购物车应用程序时,我们可以创建一个用于计算价格的模块,再创建一个用于管理购物车商品的模块。每个模块拥有一个单独的源文件。

模块的名称就是文件名,不包括 .py 后缀。例如文件 pricing.py 对应的模块名就是 pricing。

编写模块

首先,创建一个新的文件 pricing.py,在其中增加以下代码:

# pricing.py

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


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 object_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 object_name as new_name

同样,导入模块中的对象时也可以进行重命名:

from module_name import object_name as new_name

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

from pricing import get_net_price as calculate_net_price

net_price = calculate_net_price(
    price=100,
    tax_rate=0.1,
    discount=0.05
)

语法五: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)
10.0

由于 product 模块中的 get_tax() 函数覆盖了 pricing 模块中的 get_tax() 函数,程序返回的税额为 10。

总结

  • Python 模块是一个以 .py 为后缀的源代码文件。模块名就是文件名,不包括文件后缀。
  • 如果想要使用模块中的对象,可以利用 import 语句导入模块。

以上是关于Python入门教程第63篇 模块的主要内容,如果未能解决你的问题,请参考以下文章

Python入门教程第66篇 包

Python入门教程第71篇 检查文件存在性

Python入门教程第67篇 私有函数

100天精通Python(数据分析篇)——第63天:Pandas使用自定义函数案例

Python入门教程第74篇 文件目录

Python入门教程第76篇 Python虚拟环境