Py 函数进阶
文章目录
一、函数的多返回值
在C语言的函数写法中,每个函数只能有一个返回值
#include<stdio.h>
int test()
{
return 0;
//在函数出现第一个return时,函数终止运行,第二个return无效
return 1;
}
int main()
{
int ret = 0;
ret = test();
printf("%d", ret);
//此处输出0
return 0;
}
Python中,连用return的效果也是一样的,但是Python的一个return支持多返回值
语法:return 返回值1, 返回值2
按照返回值的顺序,将返回值用逗号隔开即可,且支持不同类型的数据
def test():
return 1, [123, 131], "132"
x, y, z = test()
print(x)
print(y)
print(z)
# 输出1
# [123, 131]
# 132
二、函数传参方式
1、位置参数
调用函数时根据函数定义的参数位置来传递参数,即传入参数时,参数与形参一一对应
(最常见的传参方式)
2、关键字参数
语法:键 = 值
就是传参的时候把形参作为key,把实参作为Value
这种方式可以打乱传参顺序,还可以和位置参数混用(如果有位置参数,必须放在前面)
def info(name, age, sex):
print(f"{name},{age},{sex}")
info("zhangsan", sex = "male", age = 23)
# 输出zhangsan,23,male
这种传参方式可以让函数传参更加清晰
3、缺省参数
缺省参数即默认参数,通过在定义函数时,为参数提供默认值,调用参数时可不传该值
注意:缺省参数一定在最后面(可以有多个,但是需要统一在后面)
def info(name, age, sex = "male"):
print(f"{name},{age},{sex}")
info("zhangsan", age = 23)
# 输出zhangsan,23,male
def info(name, age, sex = "male"):
print(f"{name},{age},{sex}")
info("zhangsan", age = 23, sex = "female")
# 输出zhangsan,23,female
4、不定长参数
不定长参数又叫可变参数,即不确定函数在调用的时候传入多少个参数(包括不传参)
(1)位置传递
语法: def 函数名(*args)
这里的args只是一种习惯命名,可以更改
def test(*args):
print(args)
test(215613, "abcd", 468413, "awdjaoshf", [4654, "awdasd"])
# 输出(215613, 'abcd', 468413, 'awdjaoshf', [4654, 'awdasd'])
所有传入的参数都会被args收集并合并为一个元组
(2)关键字传递
语法: def 函数名(**kwargs)
这里的kwargs和args一样都是习惯命名
def test(**kwargs):
print(kwargs)
test(a=123, b="abcd", c=["adhas", 13213])
# 输出{'a': 123, 'b': 'abcd', 'c': ['adhas', 13213]}
传入的的参数都会被kwargs接收,并合并为一个字典
三、函数作为参数传递
1、传入常规函数
传入函数实际上是传入计算逻辑,并在调用的函数中调用传入的含糊
以普通的方式调用函数时,传入的数据是不确定的,而计算逻辑确定
传入的参数为函数时,传入的数据是确定的,而计算逻辑(即传入的函数)不确定
def test(func):
ret = func(1, 2)
print(ret)
def add(x, y):
return x + y
test(add)
# 输出3
2、传入lambda定义的匿名函数
def关键字可以定义带有名称的函数
lambda关键字可以定义匿名函数(无函数名称)
语法:lambda 传入参数:函数体(一行)
匿名函数的特点:
- 函数体(执行逻辑)只能写一行
- 匿名函数只能使用一次
- lambda设定的函数自带返回值,不需要自己写
def test(func):
ret = func(1, 2)
print(ret)
test(lambda x, y: x + y)
# 输出3