15.将函数存储在模块中
函数可以让主程序和代码块分离,使主程序更易读。
可以更进一步将函数存储为称为模块的独立文件中,通过将模块导入主程序调用函数。
这样可以隐藏代码细节,将重点放在更高层次的逻辑上,
(1)导入整个模块
首先要创建模块。模块使扩展名为.py的文件,其包含要导入到程序中的代码。
def make_noodles(size,solidity,*toppings):
print(f"Make a {size} and {solidity} noodles with the following toppings:")
for topping in toppings:
print(f"\t-{topping}")
#将以上代买存入 noodles.py文件中。
import noodles #导入noodles模块
noodles.make_noodles('thin','soft','pepper','mushroom','beef') 使用module。fuction()语句调用函数
noodles.make_noodles('thick','hard','vegetable')
Make a thin and soft noodles with the following toppings:
-pepper
-mushroom
-beef
Make a thick and hard noodles with the following toppings:
-vegetable
(2)导入特定的函数
采用 from module import function 的语句导入模块中特定的函数
同时,支持用都好分隔符一次导入多个函数 from module import function1 , function2 ,function3 ...
from noodles import make_noodles #使用该方法导入的函数可以直接调用
make_noodles('thin','soft','pepper') #直接调用 而不是使用 module.fuction()的方式调用
Make a thin and soft noodles with the following toppings:
-pepper
(3)使用as给函数、模块指定别名
from noodles import make_noodles as m_nod #使用as 指定别名后,可以用别名直接调用
m_nod('thick','hard','mushroom') #使用别名直接调用函数
import noodles as nod #使用as 给模块指定别名
nod.make_noodles('thin','hard','mashroom') #使用别名调用 模块中的方法。
Make a thick and hard noodles with the following toppings:
-mushroom
Make a thin and hard noodles with the following toppings:
-mashroom
(4)也可以使用 from module import * 的方式导入模块的所有方法
如果不是对模块特别熟悉 或 不是自己编写的模块,不见以采用该方式导入。容易发生函数重名,调用函数不容易让人理解。
最佳做法是:1.只导入需要调用的函数; 2.导入整个模块,使用句点法调用模块中的函数。
16.函数编写注意事项
(1)应给函数指定描述性名称,且在其中只使用小写字母和下划线。给模块命名应遵循上述约定。
(2)每个函数都应该包含简要的描述其功能的注释,注释紧跟在函数定义后面。使其他程序员阅读文档就可以使用它。
(3)指定形参默认值时,等号两边不要有空格。函数调用中的关键字实参,也应遵循这种约定。
(4)如果形参很多,导致函数定义长度超过了79字符,可以在函数定义中输入左括号后按回车键,并在下一行按两次Tab,从而将形参列表和只缩进一层的函数体区分开来。
之后大多数编译器会自动对其后续参数列表,使其缩进程度与你给定的第一个参数列表行只当的缩进程度相同。
(5)如果程序或模块包含多个函数,可以使用两个空行将相邻的函数分开,这样将更容易知道那个函数在什么地方结束,下一个函数从什么地方开始。
(6)所有import语句都应该放在文件开头。如果文件开头使用了注释描述整个程序的情况例外。
示例:
编写一个只包含一个函数的程序 make_tea(),并将其存于另一个文件中 tea.py,尝试以上的导入方式实现函数的调用
#1 导入整个模块,用句号格式调用函数
import tea
tea.make_tea()
#2 导入模块的指定函数,使用函数全名调用
from tea import make_tea
make_tea()
#3 导入模块的指定函数,并用as指定特定名称,使用指定名称调用
from tea import make_tea as mt
mt()
#4 导入模块,用as指定特定名称,使用特定名称 + 句号调用函数
import tea as t
t.make_tea()
#5 导入模块的所有方法,使用函数名称调用
from tea import *
make_tea()