定义函数
函数其实就是带名字的代码块。用于完成具体的工作。
定义函数首先使用def语句定义,并且在定义完成之后以冒号收尾。
调用它直接输入greet_name即可。
向函数传递信息
由示例我们可以看出,在函数greet_user中我们传递了一个参数username。通过这里的username我们可以让函数接受任意指定值。,并且可以根据需要调用函数任意次,并且无论传入什么样的名字,都会生成相应的输出。
形参和实参
在上一个示例中,变量username是一个形参—函数完成其工作所需的一项信息。(可以理解为这是个百变怪,可以变成任意的东西,所以是形参)
而值‘zzz’是实参—是调用函数时传递给函数的信息(可以理解为百变怪变成的东西,这个是实实在在的东西所以是实参)
传递实参
1.位置实参
在你调用函数时,python必须将函数调用中的每个实参都关联到函数定义中的一个形参。这种基于实参顺序的关联方式,称之为位置实参。
但是位置实参的顺序很重要。如果实参顺序不正确,那么结果会出乎意料。所以在位置实参调用中,我们应该使实参的顺序与函数定义中的形参顺序一致。
2.关键字实参
关键字实参是传递给函数的名称-值对。直接在实参中将名称和值关联了起来,一次我们不用担心实参顺序,也不会混淆。
(使用关键字实参时,务必准确的指定函数定义中的形参名)
默认值
默认值就是在编写函数时,可一个每个形参指定默认值。在调用函数中给形参提供了实参时,python将使用指定的实参值;否则,将使用形参的默认值。
比如我们的示例中,发现宠物的类型都是小狗,所以我们可以给宠物类型设定默认值小狗。
注意,在我们示例中,我们修改了形参的顺序。由于给animal_type指定了默认值,无需通过实参来指定动物类型,因此在函数调用中只包含一个实参——宠物名字。然而,python依然将这个实参视为位置实参,因此如果函数中只包含宠物的名字,这个实参将关联导函数的第一个形参。
(在使用默认值时,在形参中必须先列出没有默认值的形参,在列出有默认值的形参。)
返回值
函数并非直接显示输出,它也可以处理一些数据。函数返回的值叫返回值。我们可以使用return语句将值返回到调用函数的代码行。
让实参可选
在姓名中,并非所有人都有中间名,我们可以让中间名变成可选择的,可给形参middle_name指定一个默认值—空字符串,并在用户没有提供中间名时不适用这个形参。
同理函数可以返回任意形式的值,包括列表,字典等复杂的数据结构
返回字典
当然我们还可以扩展这个函数让他增加年龄:
结合使用函数和while循环
传递任意实参
有时候我们不知道函数需要接受多少个实参,这时候我们可以使用(*形参)来设定。
当然我们也可以和之前学过的位置实参,和关键字实参与传递任意实参结合使用。
给函数指定别名
当系统中有很熟名字冲突的时候,我们可以使用as语法来处理。
from pizza import make_pizza as mp
同理我们也可以使用相同方法给模块指定别名。
import pizza as p
使用*导入模块中所有函数
from pizza imprt *
函数编写指南
在函数编写过程中,
1:应给函数指定描述性名称,且只在其中使用小写字母和下划线
2:描述性名称可帮助你和别人明白函数想要做什么
3:模块命名也应该遵循上述规则。