Python基础-函数
函数定义:
def def_name(): """ Comments #文档描述(注释) """ expression #语句块 return value #返回值
过程和函数的区别:过程是没有返回值的函数
返回值问题:如果没有返回值那么返回None;如果方法的返回值中有多个返回值,那么python将以元组的形式返回他们。(等价于返回一个值)
参数调用:
1. 位置参数:实参与形参一一对应
2. 关键字参数:实参与形参顺序无关
3. 默认参数:默认参数在函数调用时可以不用传实参,系统将自动以默认值执行程序
4. 参数组:可以用于传递任意参数(参数组在形参中一定要后放)
1. *args:以元组的方式接收N个位置参数 例如:func(*args)
*args实参的传递:
1. 直接传递:func(1,2,3,4...)
2. func(*[1,2,3,4...])
2. **kwargs:以字典的方式接收N个关键字参数 例如:func(**kwargs)
**kwargs实参的传递:
1. 直接传递:func(key1 = val1,key2 = val2...)>>>key1、key2...必须是关键字
2. func(**{key1 : val1,key2 : val2...})s
注:
-
如果位置参数调用和关键字参数调用混搭,那么按照位置与形参一一对应
-
关键字参数调用一定要在位置参数调用后面,否则会报错
全局变量和局部变量:
在函数内的变量默认为局部变量,在函数内修改对函数外同名变量不产生任何作用,如果想在函数内修改该全局变量那么要在函数内声明该变量为一个全局变量而不是局部变量 即:global val 在该语句后面再修改该变量那么就是修改的全局变量(全局变量一定要在函数外部显式地定义而不是在函数内部隐式定义>>>易出错)
特殊情况:除了字符串、整数在函数内部默认视作局部变量,其余复杂数据类型(列表、字典、集合、类)在函数内部是被视作全局变量的(即复杂数据类型可以在函数内部直接对全局值进行修改)
高阶函数:将一个函数作为实参传给函数,返回值中包含该函数名(在另一个函数中使用该函数),这就是高阶函数 例如:
def add(a,b,j): return f(a) + f(b) add(3,-6,abs) # 结果为9
匿名函数:匿名函数使用lambda关键字定义,注意,匿名函数只能处理简单的逻辑(可以处理三元运算),如果逻辑过于复杂那么系统会抛出一个错误
func = lambda n:n*n func(5) # 结果25
上面代码等价于:
def func(n): return n*n func(5)
如果没有变量结束匿名函数,那么可以这样调用匿名函数
(lambda n:n*n)(5)