重生归来,我要成功 Python 高手--day12 函数进阶
·
renturn 多返回值
按照返回值的顺序,写对应的多个变量,多个变量之间用逗号隔开,本质返回的是一个元组
# 多返回值
def find_max(lst):
"""
:param lst: 数据列表
:return: 最大值和最小值
"""
v_max = max(lst)
v_min = min(lst)
return v_min, v_max # 返回的是元组
list = [1, 2, 3, 4, 56]
result = find_max(list)
print(result[0])
print(result[1])
# 将返回的第一个给第一个变量,第二个给第二个变量
r_min, r_max = find_max(list)
print(f"最小值{r_min},最大值{r_max}")
# # 练习
# #计算列表的平均值和求和并返回
list = [1, 2, 3, 4, 5, 6]
def find_avg_sum(lst):
"""
:param lst: 整数列
:return: 求和和平均值
"""
v_sum = sum(lst)
v_avg = v_sum / len(lst)
return v_sum, v_avg
s_sum, s_avg = find_avg_sum(list)
print(f"和:{s_sum},平均值:{s_avg}")
位置参数和关键字参数
调用函数时根据函数定义的参数位置来传递参数,传递的参数和定义的参数的顺序和个数必须一致,
关键字参数函数调用时通过“键=值,形成传递参数”
函数调用时,位置参数要在关键字参数前面
# 位置参数和关键字参数
def user(name, age, gender="男"):
print(f"姓名:{name} 年龄:{age} 性别:{gender}")
# 位置参数
user("zjj", 11, "男")
# 关键字参数
user(name="zjj", gender="女", age=13)
# 位置和关键字参数混用但位置参数要在关键字参数前面
user("z1jj", gender="女", age=13)
# 默认值参数
user("zawdj", age=18)
练习
def main_max(x,y,z=100):
"""
:param x: 参数一
:param y: 参数二
:param z: 参数三默认值是100
:return: 返回最大值
"""
num_max=0
if x>num_max:
num_max=x
if y>num_max:
num_max=y
if z>num_max:
num_max=z
return num_max
main_max(x=10,y=20)
print(main_max(10,20))
s=main_max(10,z=20,y=50)
print(s)
缺省参数
这个这个函数的形式参数一个默认值,如果调用这个函数的时候没有给这个参数数值的话,就会使用默认值来展示出来,默认值参数要在没有默认值的右边
def user(name, age, gender="男"):
print(f"姓名:{name} 年龄:{age} 性别:{gender}")
# 位置参数
user("zjj", 11, "男")
# 关键字参数
user(name="zjj", gender="女", age=13)
# 位置和关键字参数混用但位置参数要在关键字参数前面
user("z1jj", gender="女", age=13)
# 默认值参数
user("zawdj", age=18)
不定长参数
位置传递(元组接受----位置传递 ,一个*号)
可变参数,用于不确定调用会传递多少个参数(不传参)也可以实现的场景看,将传入的参数全部收集 在一个元组中
位置传递(*args):如果不定长参数在参数列表前。后续参数要使用关键字参数
位置不定长参数
def user_info(*args):
for i in args:
print("参数是",i)
print(args)
user_info('python','python','python')
user_info(1) # 参数有这些(1,)
def user(name, age, gender="男",*args):
print(f"姓名:{name} 年龄:{age} 性别:{gender}")
for i in args:
print(i)
user("al=jj",11,"男",11231223123)
def user(*args,name, age, gender="男"):
print(f"姓名:{name} 年龄:{age} 性别:{gender}")
for i in args:
print(i)
user("al=jj",name="123",age=11)
def student (*args,name,age,height):
"""
:param name: 姓名
:param age: 年龄
:param height: 身高
:param args: 幸运数字
:return: 无
"""
print(f"我是{name},今年{age}岁,身高{height}cm")
print(f"我的幸运数字有:",end=" ")
for i in args:
print(i,end=" ")
student(1,2,3,name="aaa",age=11,height=123)
关键字传递(字典接收----关键字传递,两个*号)
**关键字传递,只能写在参数列表的最后面,传入的内容是(键=值)
# 关键字参数 **kwargs只能写在最后面
def user(**kwargs):
print(kwargs)
print(type(kwargs))
user(a=1,b=2,c=3)
def user(**kwargs):
for k in kwargs:
print(f"{k}:{kwargs[k]}")
user(a=1,b=2,c=3)
def user(name,age,**kwargs):
print(f"{name} {age}")
print("我的其他信息")
for k in kwargs:
print(f"{k}:{kwargs[k]}")
user(name=123,age=11,a=1,b=2,c=3)
练习
def xinxi(name,age,gender,*args,**kwargs):
print(f"我是{name}今年{age}岁性别{gender}")
print(f"我的幸运数字是:{args}")
print("我的其他信息如下:")
for k in kwargs:
print(f"{k}:{kwargs[k]}")
xinxi("yaaa",11,"男",1,2,3,4,5,habby="chi",a=1,b=2)
匿名函数
把函数作为参数传递--->将函数作为实际参数去传递/把一个函数当作一个参数传入另一个函数中
传输的是计算逻辑
# 函数作为参数传递
def func_a(f):
result=f(3,2)
return result
def add(x,y):
return x+y
def sub(x,y):
return x-y
def mul(x,y):
return x*y
def div(x,y):
return x/y
print(func_a(add))
print(func_a(sub))
print(func_a(mul))
print(func_a(div))
对于元组:
sorted(变量名,key=函数方法,[revalse=True])默认使用的是升序排列,为True时为降序排列
# key关键字,决定排序依据
def my_soty(x):
return x[1]
lst = (("a", 99), ("b", 88), ("c", 66))
print(sorted(lst, key=my_soty)) # 默认是升序
print(sorted(lst, key=my_soty, reverse=True)) # 是降序1
t=((1,"a", 99), (2,"b", 88), (3,"c", 66))
def my_soty2(x):
return x[2]
print(sorted(t, key=my_soty2))
lambda表达式
lambda,定义无名称函数(只能使用一次),,函数体只有一行,结果直接通过return返回
语法: lambda 参数:计算逻辑
# lambda表达式
def func_a(f):
result = f(3, 2)
print(result)
func_a(lambda x, y: x + y) # 函数体只有一行,并且内置return
func_a(lambda x, y: x * y)
lst = (("a", 99), ("b", 88), ("c", 66))
# 传入参数是被排序容器的一个元素,返回值是排序依据
print(sorted(lst, key=lambda x: x[1]))
# lambda表达式练习题
def func(x,y,f):
result=f(x,y)
return result
print(func(2, 3, lambda x, y: x * y))
更多推荐
所有评论(0)