一.为什么用函数:
解决代码重用问题
统一维护
程序的组织结构清晰,可读性强
二.定义函数
先定义后使用!!
def funcname(arg1,arg2,...):
"""描述信息"""
函数体
return value
定义函数可以分为三类:
无参函数
foo()
不需要返回值
有参函数
bar(x,y)
空函数
函数体写pass
三.调用函数
语句形式:foo()
表达式形式:res=10*my_sum(1,2)
函数调用作为另外一个函数的参数:print(my_sum(1,2))
四.函数的返回值
可以返回任意类型
没有return的时候 返回None
return 可以返回一个值
可以返回多个值,用元组的形式表示
只能执行一次return
五.函数的参数
实参和形参
def foo(x,y)
print(x)
print(y)
*****在实参的角度
1.按照位置传值
foo(1,2)
2.按照关键字传值
foo(x=1,y=2)
3.混着用
foo(1,y=2)
按位置传值必须在按关键字传值的前面
foo(y=2,1)报错
对于一个形参只能赋值一次
*****从形参的角度分析
位置参数:必须传值的参数
默认参数:无需传值(可传可不传)
默认参数必须放在位置参数的后面
六.*args和**kwargs
*args
*按照位置传值以后的数字给他(元组)
def foo(x,*args):
print(x)
print(args)
foo(1,2,3,4,5)
*args与位置参数和默认参数混用
**kwargs
**按照关键字传值以后的数字给他(字典)
def foo(x,**kwargs):
print(x)
print(kwargs)
foo(1,y=1,z=2)
混着用
def foo(x,*args,**kwargs):
print(x)
print(args)
print(kwargs)
从形参的角度
def foo(**kwargs):
print(kwargs)
foo(x=1,y=2,z=3)
从实参的角度
def foo(x,y,z=1):
print(x)
print(y)
print(z)