函数:
1,解决代码重用的问题
2,统一维护
3,程序组织结构清晰,可读性强
定义函数
1,先定义,后使用。
2,最好一个功能,定义一个函数。
3, 定义无参函数
def foo(): print('foo')
定义有参函数
def my_sum(x,y): return x+y
定义空函数
调用函数
1,语句形式 ---->foo()
2,表达式形式 ---->res=10*my_sum(1,2)
3,函数调用做为另外一个函数的参数:print(my_sum(1,2))
函数的返回值
不写return ---> None
return 一个value ---> 这个value
return 多个值 ---> 由这多个值组成的元组
函数的参数
形参和实参
def my_sum(x,y): return x+y my_sum(1,2) #定义阶段,形参,调用阶段,实参 #实参必须要有实际的值
实参的形式
实参可以是任何类型,但最好避免传可变类型。函数执行过程中,会改变外部的值。
从实参的角度
按位置传值 my_sum(1,2)
按关键字传值 my_sum(y=1,x=2)
混合传值 my_sum(1,y=2)
注意:
1,位置在前,关键字在后
2,不能对一个形参,重复赋值
在python3中,变量名只是一种绑定关系,没有储值功能
从形参的角度
位置参数 def foo(x,y,z)
默认参数 def foo(x,y=1)
什么时候用?二者的位置排列,特性?
1,默认参数,可传值,可不传值
2,未知参数,必须传值
*args和**kwargs
1, *args
def foo(x,*args)
foo(1,2,3,4,5,6)
#多余的按位置调用的,拼成一个元组
2, **kwargs
def foo(x,**kwargs)
foo(1,x=2,y=3)
#多余的按关键字传值,赋值成一个字典
3,混用
def foo(x,*args,**kwargs) foo(1,2,3,4,5,6,a=1,b=2,c=3) x=1 args=(2,3,4,5,6) kwargs={'a':1,'b':2,'c':3}
4,例子
def auth(name,password,sex='male'): pass def timmer(*args,**kwargs):
start_time=time.time() auth(*args,**kwargs)
stop_time=time.time()
print('run time is %s' %(stop_time-start_time)
timer(name=1,password=123,sex='female')