函数的优点之一是,使用它们可将代码块与主程序分离。通过给函数指定描述性名称,可让主程序容易理解的多。
你还可以进一步,将函数存储在被称为模块的独立文件中,再将模块导入到主程序中。
import语句允许在当前运行的程序文件中使用模块中的代码
1、导入整个模块
要让函数是可导入的,得先创建模块。模块是扩展名为.py的文件,包含要导入到程序中的代码。
下面来创建一个包含函数make_pizza()的模块。为此我们将文件pizza.py中除函数make_pizza()之外的代码都删除:
pizza.py
def make_pizza(size,*toppings):
"""概述要制作的pizza"""
print("\nMaking a "+str(size)+"-inch pizza with the following toppings:")
for topping in toppings:
print("- "+topping)
接下来,我们在pizza.py所在的目录中创建另一个making_pizzas.py的文件,这个文件导入刚创建的模块,再调用make_pizza()两次
import pizza
pizza.make_pizza(16,'pepperoni')
pizza.make_pizza(12,'mushrooms','green peppers','extra cheese')
结果与原先结果相同
Making a 16-inch pizza with the following toppings:
- pepperoni
Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese
2、导入特定的函数
你还可以导入模块中特定函数,这种导入方法的语法如下:
from module_name import function_name
通过逗号分隔函数名,可根据需要从模块中导入任意数量的函数:
from module_name import function_0,function_1,function_2
对于前面的making_pizzas.py示例,如果只是想导入要使用的函数,代码将类似于下面这样:
from pizza import make_pizza
make_pizza(16,'pepperoni')
make_pizza(12,'mushrooms','green peppers','extra cheese')
3、使用as给函数指定命名
如果要导入的函数的名称可能与程序中现有名称冲突,或者函数名称太长,可指定简短而独一无二的别名——函数的别名,类似于外号
下面给函数make_pizza()指定了别名mp()。这是在import语句中使用make_pizza as mp实现的
from pizza import make_pizza as mp
mp(16,'pepperoni')
mp(12,'mushrooms','green peppers','extra cheese')
指定别名的通用语法如下:
from module_name import function_name as fn
4、使用as给模块指定命名
通过给模块指定简短的别名,可以更轻松的调用模块中的函数
import pizza as p
p.make_pizza(16,'pepperoni')
p.make_pizza(12,'mushrooms','green peppers','extra cheese')
给模块指定别名的通用语法如下:
import mmodule_name as mn
5、导入模块中的所有函数
使用*运算符可让python导入模块中的所有函数
from pizza import *
make_pizza(16,'pepperoni')
make_pizza(12,'mushrooms','green peppers','extra cheese')
import语句中的星号让Python将模块pizza中的每个函数都复制到这个程序文件中。由于导入了每个函数,可通过名称来调用每个函数,而无须使用句点表示法。然而,使用并非自己编写的大型模块时,最好不要采用这种导入方法。这是因为如果模块中有函数的名称与当前项目中使用的名称相同,可能导致意想不到的结果:Python可能遇到多个名称相同的函数或变量,进而覆盖函数,而不是分别导入所有的函数。
最佳的做法是,要么只导入需要使用的函数,要么导入整个模块并使用句点表示法。这让代码更清晰,更容易阅读和理解。这里之所以介绍这种导入方法,只是想让你在阅读别人编写的代码时,能够理解类似于下面的import语句:
from module_name import *