Python--函数
"""
函数:
"""
# 定义函数
def say():
print("俺正在说话")
# 使用lambda表达式简化上面函数
say = lambda: "俺再一次说话"
# print(say())
# 带参数的函数
def eat(what):
print(f"你们正在吃{what}")
eat = lambda what: f"你们正在吃{what}"
# print(eat("螺蛳粉"))
# 定义带两个参数的函数
def test(a, b=222):
print(f"a={a}")
print(f"b={b}")
test = lambda a,b=222: f"a={a},b={b}"
# print(test(111))
# 带条件的lambda
test7 = lambda a,b : a if a > b else b
print(test7(22, 44))
# 求1,2,3内的和,用lambda实现
test8 = lambda *args: sum(args)
# print(test8(1, 2, 3))
# 定义可变参数1,参数是元组类型
# 多个值的和
def test1(*args):
"""这是一个求多个值和的函数"""
sum = 0
for i in args[0]:
sum += i
else:
# print(f"和为{sum}")
# 返回值
return sum
# 定义可变参数2:
# 参数为字典类型
def test2(**kwargs):
for k, v in kwargs.items():
print(k, v)
# 返回值为多个
def test3(a, b, c):
"""
这是一个测试函数,测试函数为多个返回值
:param a: 值1
:param b: 值2
:param c: 值3
:return: 返回多个值
"""
a += 100
b += 100
c += 100
return a, b, c
# 计算多个值的平均值
def test4(*args):
sum = test1(args)
return sum / len(args)
# 测试变量范围
a = 222 # 全局变量
def test5():
# 在函数内部修改全局变量的值
# 必须声明 变量为全局变量
global a
a = 333
print(f"函数内:{a},地址为:{id(a)}")
# 递归:函数内部调用函数本身
# 求某个数以内的和
def test6(num):
if num == 1:
return 1
return num + test6(num - 1)
# 调用递归函数
# print(test6(100))
# print(f"函数外:{a},地址为:{id(a)}")
# test5()
# print(f"函数外:{a},地址为:{id(a)}")
# 调用函数:必须放在定义函数的后面
# say()
# 调用有参的函数
# eat("辣椒炒尖椒")
# 调用参数:1.位置方式
# test(11, 22)
# 2.关键字方式
# test(b=22, a=11)
# 3.缺省参数(默认值)
# 注意:有默认值的参数必须放在没有默认值参数的后面
# test(11, 22)
# 调用可变参数1
# print(test1(1, 2, 3))
# 调用可变参数2
# test2(name="罗旺", age=19)
# 调用返回值为多个值的函数
# print(test3(20, 10, 30))
# 查看函数的说明文档
# help(test3)
# 函数嵌套
# print(test4(1, 2, 3))
# 使用lambda对字典列表进行排序
persons = [
{"name": "张三", "age": 22},
{"name": "A罗旺", "age": 12},
{"name": "王五", "age": 23},
{"name": "赵六", "age": 2}
]
persons.sort(key= lambda person:person["name"], reverse=True)
print(persons)