下面我们更进一步, 将函数存储在称为模块的独立文件中
将函数存储在独立文件中, 可以隐藏程序代码细节, 将重点放在程序的高层逻辑中
模块是扩展名为.py的文件, 包含要导入到程序中的代码
下面的每个例子都是一个文件, 并且他们都在同一个目录中
文件的后缀名(.py)是编译器自己加的不需要我们写
1.导入整个函数
我使用了书上的关于制作披萨的例子
首先创建一个名为pizza.py的文件在里面编写函数
# 这是一个模块其文件名叫pizza.py
def make_pizza(size, *toppings):
print(f"\n使用以下配料制作一个{size}寸的披萨")
for topping in toppings:
print(f"-{topping}")
然后再创建一个名为making_pizzas.py的文件
# 这是一个文件, 用来调用pizza模块里的函数
import pizza # 让Python打开文件pizza.py, 并将其中所有的函数都复制到这个程序中
pizza.make_pizza(16, 'pepperoni')
pizza.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
2.导入特定的函数
对之前的pizza.py文件做些修改让它也能做蛋糕
# 这是一个模块其文件名叫pizza.py
def make_pizza(size, *toppings):
print(f"\n使用以下配料制作一个{size}寸的披萨")
for topping in toppings:
print(f"-{topping}")
# 披萨店有了新业务, 他们开始做蛋糕了
def make_cake(size, *toppings):
print(f"\n使用以下配料制作一个{size}寸的蛋糕")
for topping in toppings:
print(f"-{topping}")
下面是创建一个making_cakes.py的文件
from pizza import make_cake # 此处导入的是make_cake函数因此make_pizza函数不能在此处使用
make_cake(12, '海带', '海蜇', '海参', '海瓜子') # 段非然想给朋友点一个海鲜蛋糕
# 使用导入特定函数就不需要在前面加文件名了
3.用as给函数指定别名
下面是之前的making_pizzas.py文件
from pizza import make_pizza as mp # 此语句给make_pizza函数指定了叫做mp的别名
# 直接使用mp的命名即可使用函数
mp(12, '枸杞', '党参', '肉桂', '白术', '白芍') # 这次段非然给朋友点了大补的中药披萨
4.用as给模块指定别名
下面我又创建了一个名为cakes_and_pizzas.py的文件
调用了上面的pizza.py文件
# 有时候我们定义的模块名字比较长, 这时我们可以给模块的名字指定别名
# 调用函数时直接用别名即可
import pizza as p
p.make_pizza(16, '枸杞', '党参', '肉桂', '白术', '白芍') # 上次朋友们说披萨不好吃, 段非然不信决定亲自尝一尝
p.make_cake(12, '海带', '海蜇', '海参', '海瓜子') # 朋友们还说海鲜蛋糕不好吃, 段非然也决定尝一尝
5.不写模块名的调用
下面我创建了名为function_module.py的文件
# 这是函数模块里面的函数用于实现加法和打印
def plus_function(a, b):
return a+b
def print_function(c):
print(c)
之后我又创建了名为python_main_1.py的文件
# 论如何优雅的实现1+1等于2
from function_module import *
answer = plus_function(1, 1)
print_function(answer)
def plus_function(a, b):
return a+b+b
print(plus_function(1, 1)) # 两次打印会有不同的结果
使用“from function_module import * ”的好处是可以不用写模块名, 但坏处就是若当前文件有同名函数时将会出现意外的结果