定义函数
1.不带参数
语法: def 函数名():
def say():
print("世界真美好")
调用函数: 注1:必须放到定义函数的后面
def test():
print("世界真美好")
test()
2.带一个参数的函数 注2:函数和函数之间空格两行
语法: def 函数名(参数):
def say(what):
print(f"{what}")
调用函数:调用带参数的函数,如果不带参数过去,编译不报错,但是运行报错(跟java不同)
say(“真好”)
def test2(what):
print(f"{what}")
test2("哈哈哈")
3.带两个参数的函数
def test(a, b):
print(f"a={a}")
print(f"b={b}")
调用函数:
1.位置方式
test(22, 11)
2.关键字方式
test(b=22, a=11)
3.缺省参数(默认值) 注意:有默认值的参数必须放在没有默认值参数的后面
def test(a, b=444):
#test(b=11,11) 错误:因为b有默认值
test(11,b=11)
4.可变参数
1.参数是元组类型
def test1(*args):# *代表可变参数
"""这是一个求多个值和的函数"""
sum = 0
for i in args:
sum += i
else:
print(f"和为{sum}")
2.参数为字典类型
def test2(**kwargs):
for k, v in kwargs.items():
print(k, v)
# 调用函数:
test2(name="zs", age=19)
函数返回值
函数的说明文档:
help(print())
1.返回值为多个(跟java不同)
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
help(test3)
函数嵌套调用
def test1(*args):
"""这是一个求多个值和的函数"""
sum = 0
for i in args[0]: #去数组第一个元素
sum += i
else:
# print(f"和为{sum}")
# 返回值
print(sum)
return sum
# 计算多个值的平均值
def test4(*args):
sum = test1(args)
return sum / len(args)
print(test4(12, 5, 3))
测试变量范围
a=9
def test5():
# 在函数内部修改全局变量的值
# 必须声明 变量为全局变量
global a #声明为全局变量 目的修改变量a的值
a = 333
print(f"函数内:{a},地址为:{id(a)}")
print(f"函数外1:{a},地址为:{id(a)}")
test5()
print(f"函数外2:{a},地址为:{id(a)}")
递归:函数内部调用函数本身
这里用文字说一下,首先调用了test6方法传了个4进入if判断不等于1、
进入return num + 又调了一次方法4-1=3还是不满足条件就继续
直到==1才不会相加
# 求某个数以内的和
def test6(num):
if num == 1:
return 1
return num + test6(num - 1) # 4+3+2+1
# 调用递归函数:
print(test6(4))
lambda表达式
lambda表达式(匿名函数,如果一个函数有一个返回值,并且只有一句代码,就可以使用lanbda表达式简化)
语法:
变量名=lambda: 表达式/返回值 注:参数可以省略
1.不带参数的函数
say = lambda: "真美好"
print(say())
# 注:跟def定义的函数的调用方式有区别
2.带一个参数的函数
say1 = lambda what: f"你说:{what}"
print(say1("halo"))
3.带两个参数的函数
test2 = lambda a, b=222: f"a={a},b={b}"
print(test2(1, 2))
4.带条件的lambda
test3 = lambda a, b: a if a > b else b
print(test3(1, 2))
1.求1,2,3内的和,用lambda实现
test8 = lambda *args: sum(args)
print(test8(1, 2, 3))
2.用lambda对字典列表进行排序
persons = [
{"name": "张三", "age": 22},
{"name": "A罗旺", "age": 12},
{"name": "王五", "age": 23},
{"name": "赵六", "age": 2}
]
persons.sort(key= lambda person:person["age"], reverse=True)
print(persons)