# 一,为什么使用函数 # 1,可以使代码的组织结构清晰,可读性好 # 2,遇到重复的问题可以直接调用函数 # 3,功能扩展时,可直接修改,而无需每处都进行修改、 # 二,函数为何物 # 函数对程序员相当于巧妇之于米,蓝翔之于挖掘机 # 学生之于书本。 # 三,函数分类 # 1,内置函数,python解释器已经给我们定义好了很多函数,方便我们用来 # 开发,我们可以直接拿来用,而不用定义,例如:len,man,min,sum # 2,自定义函数,很显然python内置的函数功能是有限的,要不然我们也不用学习了, # 直接进行调用就可以了,需要我们自己根据需求来定制函数、 # 四。定义函数 def max_num(num1,num2): if num1 > num2: return num1 else:return num2 # 函数名:max_num:应该见名知意, # 参数:num1,num2:调用时应该根据是否有参数来决定是否需要传参 # 返回值:不写默认返回为空 # 需要先进行定义,在调用 # num = sum_num(3,6) # def sum_num(num1,num2): # return num1 + num2 # 上边这个写法是不对的。 # 函数定义的时候,只检测语法,不执行代码, # 也就是说语法错误在函数定义阶段会被检测出来, # 代码的逻辑错误只有在执行的时候才会知道 # 五,调用函数 # 函数名加括号,传入参数,是否有返回值 # 六,函数的参数 # 形参即变量名,实参即变量值,函数调用时,将值绑定到变量名上, # 函数调用结束时,解除绑定 def modify_num(num1,num2): num1 = 5 num3 = 6 n1,n2 = 3,5 modify_num(n1,n2) print(n1,n2) # 形参为num1,num2,实参为3,5 # 此时n1,n2的值还是不会变得, # 几种函数参数: # 1,位置参数:按照从左向右顺序定义的参数 # 位置形参:必选参数,位置实参:按照位置给形参传值 # 2,关键字参数:按照key=value的形式定义实参 # 不用按照位置为形参传值 # (1),关键字参数必须在位置实参右边 # (2),对同一个形参不能重复传值 # 3,默认参数:在定义是就已经为其赋值 # 可以传值,也可以不穿值, # 1,只在定义时赋值一次, # 2,默认参数的定义应该在位置形参右边 # 3,通常为不可变类型 # 4,可变长参数: # 实参的值得个数不固定, # 实参有按位置和关键字两种形式定义,*args,**kwargs. def foo(x, y, *args): print(x, y) print(args) foo(1, 2, 3, 4, 5) def foo(x, y, *args): print(x, y) print(args) foo(1, 2, *[3, 4, 5]) def foo(x, y, z): print(x, y, z) foo(*[1, 2, 3]) def foo(x, y, **kwargs): print(x, y) print(kwargs) foo(1, y=2, a=1, b=2, c=3) def foo(x, y, **kwargs): print(x, y) print(kwargs) foo(1, y=2, **{'a': 1, 'b': 2, 'c': 3}) def foo(x, y, z): print(x, y, z) foo(**{'z': 1, 'x': 2, 'y': 3})