为何要用函数:
1、解决代码重用的问题
2、提高代码的可维护性,统一维护
3、程序的组织结构清晰,可读性强
定义函数
先定义后使用!!!
def funcname(arg1,arg2,.....) #funcname = 函数体
“描述信息”
函数体
return value
定义无参函数 无返回值
def foo()
print("foo")
定义有参函数 接受外部传入的值,有return 返回一个值
def my_sum(x,y)
return x+y
定义空函数 pass
调用函数
语句形式:foo()
表达式形式:res=10*my_sum(1,2)
函数调用作为另外一个函数的参数:print(my_sum(1,2))
函数返回值
不写return ----->None
return 一个值---->这个值
return 多个值 -----> 由这多个值组成的元组
函数的参数
形参:定义函数时候用的参数(命名)
实参:调用函数时候用的参数(实数) 也可以定义变量值再调用函数
my_sum(1,2)
a=1,b=2
my_sum(a,b)
实参在函数调用的过程中有效,过了就无效!
从实参的角度:
按位置传值 my_sum(1,2)
按关键字传值 my_sum(y=1,x=2)
混合传值 my_sum(1,y=2)
从形参角度:
位置参数: def foo(x,y,z) (函数变化比较多)
默认参数: def foo(x,y=1)(函数变化不多,调用次数不多)
什么时候用?
二者的位置排列?
二者的特性?
*args def foo(x,*args)
按位置传值,多余的值被*接收,组成元组的形式
**kwargs def foo(x,**kwargs)
按关键字传值,多余的值被**接收,组成字典的形式
*args 接收元组,列表,字符串,集合,输出是元组
**kwargs 接收字典,输出也是字典
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}