函数
定义函数
- 不带参数
语法: def 函数名():
def say():
print("世界真美好")
调用函数: 注1:必须放到定义函数的后面
say()
- 带一个参数的函数
注2:函数和函数之间空格两行
语法: def 函数名(参数):
def say(what):
print(f"{what}")
调用函数:调用带参数的函数,如果不带参数过去,编译不报错,但是运行报错(跟java不同)
say("真好")
- 带两个参数的函数
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)
- 可变参数
- 参数是元组类型
def test1(*args): """这是一个求多个值和的函数""" sum = 0 for i in args: sum += i else: print(f"和为{sum}") 调用函数: print(test1(1, 2, 3))
2. 参数为字典类型
```bash
def test2(**kwargs):
for k, v in kwargs.items():
print(k, v)
调用函数:
test2(name="zs", age=19)
```
函数返回值
函数的说明文档:
help(print())
- 返回值为多个(跟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: 表达式/返回值 注:参数可以省略
- 不带参数的函数
say = lambda: "真美好"
print(say()) 注:跟def定义的函数的调用方式有区别
- 带一个参数的函数
say = lambda what: f"你说:{what}"
print(say())
- 带两个参数的函数
test6 = lambda a,b=222: f"a={a},b={b}"
print(test6(1,2))
- 带条件的lambda
test7 = lambda a,b : a if a > b else b
print(test7(1,2))
完整代码
# def test():
# print("ok")
#
#
# test()
# def test2(what):
# print(f"{what}")
#
#
# test2("世界真美好")
# def test2(a,b):
# print(f"a={a}")
# print(f"b={b}")
#
#
# test2(22,11)
# def test1(*args):
# """这是一个求多个值和的函数"""
# sum = 0
# for i in args:
# sum += i
# else:
# print(f"和为{sum}")
#
#
# test1(1, 2, 3,4)
# def test2(**kwargs):
# for k, v in kwargs.items():
# print(k, v)
#
#
# test2(name="zs", age=19)
# 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:
# 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))
# say = lambda: "真美好"
#
# print(say())
# say = lambda what: f"你说:{what}"
#
# print(say("世界真大"))
# test6 = lambda a, b=222: f"a={a},b={b}"
#
# print(test6(1, 2))
test7 = lambda a, b: a if a > b else b
print(test7(1, 2))