1、函数:①函数(function)从宏观上说,描述了生活中对象本身的一种行为!如学生有学习的行为、老师有教学的行为!
②函数(function)从代码角度狭义上描述:包含了一部分代码的功能模块!
打包(封装)成整体的代码片段
1.提升代码的重复利用性
2.提升代码的可读性
3.提升代码的编写效率
2、函数的语法结构
def 函数名([参数1,参数2....参数n]):
函数的代码片段
[return 值]
def add(a, b): a,b叫做形式参数
return a + b return关键字不仅仅会返回运算结果同时他还会立即结束函数
result = add(10, 20) # 10,20 叫做实际参数
print(result)
参数:位置参数, 默认值参数,可变参数,关键字参数,命名参数,
位置参数,一般情况下实参的传参顺序必须跟形参列表一致
如果先传某个后面的参数,需要指名道姓的传参
def add(a, b):
return a + b
result = add(b=20, a=10)
print(result)
3、 默认值参数 在形参列中提前给参数赋值
调用具有默认值参数的函数时,可以省略默认值参数的传参,如果觉得默认值参数不好用,我们可以主动传参替换掉默认值
def circle_area(r, pi=3.14):
return pi * r * r
result = circle_area(10)
result = circle_area(10, 3.1415926)主动替换
print(result)
4、默认值参数的可以当做是一个全局的变量,每调用一次都会修改原有的内容,下一次调用在修改后结果上继续
所以默认值参数,虽然不禁止参数数据类型为可变,但是建议默认值参数的数据类型为不可变
def add(ls=[]):
for i in range(3):
ls.append(i)
print(ls)
add()# [0,1,2]
add()# [0,1,2,0,1,2]
add()# [0,1,2,0,1,2,0,1,2]
5、可变参数:可以0~n个实际参数,会将实际参数打包成元组交给函数运算
在函数 可变参数就是一个元组
def add(*args, a, b, c):此时a,b,c出现在可变参数之后,他们不再是位置参数而是 命名参数
result = 0
for num in args:
result += num
return result
print(add(1, 2, 3, 4, 5, 6, 7, 9, a=10, b=11, c=12))
6、命名参数:就是必须指名道姓传参的参数,他一般出现在*args之后或者 * 之后。避免参数过多时,出现传参错误的情况,同时也可以提升代码清晰度,一眼就能知道那个实参传给了哪个形参
def test(*, a, b, c, d, ):
print(a, b, c, d)
test(a=1, b=2, c=3, d=4)
7、关键字参数
关键字参数的自由度非常高,参数的名称可以在传入实参是临时赋予
def function(**kwargs):
for key, value in kwargs.items():
print(key, value)
function(学号="001", name="zs", age=18,)
8、参数的建议数学顺序
def function(a, b, c, d=10, *args, e, f, g, **kwargs):
pass
参数组合传递
def function(a, b, c=0, *args, **kwargs):
print(a, b, c, args, kwargs)
function(*(1, 2, 3, 4), {'name': 123, 'age': 123, 'haha': 'hehe'})