第八章-函数
函数是带名字的代码块,用于完成具体的工作,要执行函数定义的特定任务,可调用该函数。
1、定义函数
关键字def告诉Python要定义一个函数,函数名为greet_user(),最后定义以冒号结尾。
紧跟在def greet_user():后面的所有缩进行构成了函数体。文档字符串用三引号括起来,描述了函数是做什么的,Python使用它们来生成有关程序中函数的文档。
1.向函数传递信息
2.实参和形参
在函数greet_user()的定义中,变量username是一个形参--函数完成其工作所需的一项信息。在代码greet_user('jesse')中,值'jesse'是一个实参。实参是调用函数时传递给函数的信息。
2、传递实参
1.位置实参
调用函数时,实参和形参关联方式基于实参的顺序,称为位置实参。
2.关键字实参
关键字实参是传递给函数的名称-值对。
3.默认值
编写函数时,可给每个形参指定默认值。
使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的形参,这让Python依然能够正确的解读位置参数。
4.等效的函数调用
5.避免实参错误
3、返回值
函数并非总是直接显示输出,相反,它可以处理一些数据,并返回一个或一组值。函数返回的值被称为返回值。
1.返回简单值
2.让实参变成可选的
3.返回字典
4.结合使用函数和while循环
4、传递列表
1.在函数中修改列表
2.禁止函数修改列表
要将列表的副本传递给函数,可以像下面这样做:
function_name(list_name[:])
切片表示法[:]创建列表的副本。在上例中如果不想清空未打印的设计列表,可像下面这样调用print_models():
print_models(unprinted_designs[:],completed_models)
5、传递任意数量的参数
有时候,你预先不知道函数需要接受多少个实参,可用形参*name表示
形参名*toppings中的星号让python创建一个名为toppings的空元组,并将收到的所有值都装到这个元祖中。
1.结合使用位置实参和任意数量实参
如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。python先匹配位置实参和关键字实参,再将余家的实参都收集到最后一个形参中。
2.使用任意数量的关键字实参
形参**user_info中的两个星号让python创建一个名为user_info的空字典,并将收到的所有名称-值对都封装到这个字典中。
6、将函数存储在模块中
将函数存储在被称为模块的独立文件中,再将模块导入到主程序中。import语句允许在当前运行的程序文件中使用模块中的代码。
1.导入整个模块
创建pizza模块
导入pizza模块
如果你使用这种import语句导入了名为module_name.py的整个模块,就可使用下面的语法来使用其中任何一个函数:
module_name.function_name()
2.导入特定的函数
你还可以导入函数中特定的函数:
from module_name import function_0,function_1,function_2
3.使用as给函数指定别名
如果要导入的函数名称可能与程序中现有的名称冲突,或者函数的名称太长,可指定简短而独一无二的别名。
from module_name import function_name as fn
4.使用as给模块指定别名
通过给模块制定简短别名,让你能够更轻松地调用模块中的函数。
import pizza as p
p.make_pizza(16,'pepperoni')
import module_name as mn