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篇 模块的主要内容,如果未能解决你的问题,请参考以下文章