目录
函数的多返回值
多个参数的传递
缺省参数
不定长参数
位置不定长参数传参举例
关键字不定长参数举例
函数作为参数传递
匿名函数
函数的多返回值
在Python中允许一个函数带回多个返回值,写法是一个return 返回值1,返回值2
在接收的时候同样使用多个变量接收,中间用逗号隔开。
如图
运行结果为1 2,也就是说x和y成功接收了test函数带回的两个返回值。
同时返回值的类型也是不受限制的,比如
运行结果为1 hello
多个参数的传递
在Python中传递参数有三种方式,分别是位置参数,关键字参数,不定长参数,缺省参数。
位置参数:调用函数时根据函数定义的参数位置来传递参数,使用这种传参方式要求传递的参数和定义的参数的顺序及个数必须一致
关键字参数:函数调用时通过“键=值”形式传递参数.使用这种传参方式可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求.同时允许位置参数进行混用,但需注意函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序
缺省参数:缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用).
作用: 当调用函数时没有传递参数, 就会使用默认是用缺省参数对应的值.
举个例子
运行结果为
如果在函数定义的时候给形参部分赋值,那么赋的这个值就是所谓的默认参数,比如
运行结果如图,我们并没有传递gender这个参数,因此使用了默认值。当然如果我们不想用默认参数可以向前面传参一样在调用函数的时候给gender传一个值
但需注意,如果想要设置默认参数,只能设置后面的参数为默认参数,允许设置多个参数的默认值,但是他们必须都在后面。
缺省参数
缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用).
作用: 当调用函数时没有传递参数, 就会使用默认是用缺省参数对应的值.
不定长参数
不定长参数也叫可变参数. 用于不确定调用的时候会传递多少个参数(不传参也可以)的场景.不定长参数分为两类,第一类是位置传递的不定长参数,第二类是关键字传递的不定长参数,这两类参数的声明是不一样的。位置不定长参数的声明使用的是*形参名进行声明,关键字不定长参数使用**形参名进行声明,对于位置不定长参数我们在进行传参的时候可以传任意个,Python中规定是使用一个元组来存放所传递的这任意个参数,对于关键字不定长的参数使用字典类型来存放所传递的这任意个参数,通常位置不定长参数的声明形参名我们写成args,即位置不定长参数的声明方式为*args,而关键字不定长参数的声明形参名我们写成kwargs,即关键字不定长参数的声明方式为**kwargs。当然形参名可以起别的名字,这是是一个规范性问题。
作用: 当调用函数时不确定参数个数时, 可以使用不定长参数。
位置不定长参数传参举例
运行结果为:传递的参数是(1, 2, 3, '小明'),参数类型为,可以观察到当我们传入参数args之后,该参数就会以元组的形式存在
关键字不定长参数举例
运行结果为:传递的参数是{'名字': '小明', '年龄': '20'},参数类型为
可以观察到当传入参数kwargs之后,该参数就会以字典的形式存在,传的时候要求参数是k=v的形式,虽然字典要求的元素应该是键值对,但是这里不要与定义字典时候的形式混淆,定义字典的时候所使用的键值对是k:v的形式,但是作为参数传递的时候我们应该传k=v的形式。
函数作为参数传递
在Python中允许函数名直接作为参数传递,这比C语言中的函数传参快捷多了,因为C语言中的函数名传参是要用函数指针来接收的,但是Python中不用,直接传函数名即可。比如
运行结果是:调用fun函数的结果为3
这是因为我们调用fun函数然后传递了三个参数,第一个参数是test_add函数的函数名,第二三个参数分别是两个数值,fun函数接收这三个参数之后就将test_add函数作为所谓的fun1然后执行return fun1(x,y)的操作了。也就是1+2
匿名函数
函数的定义方式有两种,一种是使用def关键字,可以定义带有名称的函数,另一种是使用lambda关键字,可以定义匿名函数(无名称)
有名称的函数,可以基于名称重复使用。
无名称的匿名函数,只可临时使用一次。
匿名函数定义语法:lambda 参数:一行代码
其中lambda 是关键字,表示定义匿名函数。传入参数表示匿名函数的形式参数。匿名函数的函数体只能写一行,无法写多行代码。
匿名函数也是可以作为参数传递的,如图
传递给fun函数的fun1参数就是一个匿名函数,这个函数的函数体只有一句代码,也只能有一句代码,这里是x+y,运行结果为:调用fun函数的结果为3。由于匿名函数无法重复调用,因此一个匿名函数的作用范围就只有这一次调用。调用完成之后无法二次使用。我们可以注意到我们在定义匿名函数的时候并没有写return x+y,只是写了x+y看起来好像是只执行x+y的操作不带回任何值,但是在调用fun函数的时候却发现有返回值,也就是x+y的值,这是因为匿名函数默认就是return的,当然如果写的那一句代码是打印什么的就不会return。