定义
def 关键词开头,空格之后接函数名称和圆括号(),以 ":"结尾。
def 是固定的,不能变,他就是定义函数的关键字。
函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是 要尽量简短,并能表达函数功能
括号:是必须加的,先别问为啥要有括号,总之加上括号就对了!
注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。
调用:就是 函数名() 要记得加上括号。
函数最主要的目的:封装一个功能。
函数的返回值 return
1,函数中如果遇到retrun,则直接结束函数。
2,给函数的执行者返回值。
return None
return 单个值 原封不动的返回
return 多个值 一个元组,所有的返回值作为元组的每一个元素
函数的传参:
实参
位置参数 按照顺序,一一对应
def func1(x,y):
print(x,y)
func1(1,2)
关键字参数 可以不按照顺序,但是必须一一对应
def func1(x,y):
return x+y
print(func1(y=100,x=99))
混合参数 关键字参数一定要在位置参数后面
def func1(a,y,n,x,n):
return x+y
name = 'alex'
print(func1(100,200,name,y=100,x=99))
形参
位置参数 按照顺序,一一对应
默认参数 给其传值,将原默认参数覆盖掉,不传值,不报错,使用默认值
def func1(x,y,a=666):
print(x,y,a)
func1(1,2)
func1(1,2,333)
默认参数的陷阱
默认参数若是可变的数据类型,他始终使用的是一个。
def func1(x,l1=[]):
l1.append(x)
return l1
ret = func1(1)
print(ret,id(ret))
ret1 = func1(100)
print(ret1,id(ret1))
动态参数(*args **kwargs)
函数定义时:*聚合 *args:实参里面所有的位置参数。
**kwargs:实参里面所有的关键字参数。
函数的调用时:* 打散。
def sum1(*args):
count = 0
for i in args:
count = count + i
return count
print(sum1(10,10,20,30,100))
形参的顺序:位置参数,*args,默认参数,**kwargs