一、定义函数
1.不带参数
语法: def 函数名():
def say():
print("世界真美好")
调用函数: 注1:必须放到定义函数的后面
say()
2.带一个参数的函数 注2:函数和函数之间空格两行
语法: def 函数名(参数): def say(what): print(f"{what}")
调用函数:调用带参数的函数,如果不带参数过去,编译不报错,但是运行报错(跟java不同) say(“真好”)
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}")
调用函数:
print(test1(1, 2, 3))
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}")
# 返回值
return sum
# 计算多个值的平均值
def test4(*args):
sum = test1(args)
return sum / len(args)
print(test4(12,5,3))
四、测试变量范围
a=9
def test5():
# 在函数内部修改全局变量的值
# 必须声明 变量为全局变量
global a
a = 333
print(f"函数内:{a},地址为:{id(a)}")
print(f"函数外:{a},地址为:{id(a)}")
test5()
print(f"函数外:{a},地址为:{id(a)}")
五、递归:函数内部调用函数本身
# 求某个数以内的和
def test6(num):
if num == 1:
return 1
return num + test6(num - 1)
调用递归函数:
print(test6(100))
六、lambda表达式
(匿名函数,如果一个函数有一个返回值,并且只有一句代码,就可以使用lanbda表达式简化)
语法:变量名=lambda: 表达式/返回值 注:参数可以省略
1.不带参数的函数
say = lambda: "真美好"
print(say())
注:跟def定义的函数的调用方式有区别
2.带一个参数的函数
say = lambda what: f"你说:{what}"
print(say())
3.带两个参数的函数
test6 = lambda a,b=222: f"a={a},b={b}"
print(test6(1,2))
4.带条件的lambda
test7 = lambda a,b : a if a > b else b
print(test7(1,2))