参数种类:
函数参数种类分为可变类型和不可变类型。
可变类型:在函数内部对传入参数的修改会影响到外部变量,如列表、字典等。
不可变类型:在函数内部对传入参数的修改不会影响到外部变量,如整型、字符串、元组等。
位置参数:
调用函数时,必须将函数调用中的每个实参都关联到函数的相应形参。
最简单的关联方式是基于实参的顺序,这种关联方式被称为位置实参。
默认参数:
编写函数时,可以给每个形参指定默认值。
· 在调用函数时,如果形参提供了实参,则使用指定的实参值;否则,将使用形参默认值。
·· 设置默认参数时,必选参数在前,默认参数在后。
··· 当有多个默认参数,调用时可以按顺序提供默认参数。
···· 默认参数必须指向不可变对象(然而是有办法解决这个问题的,比如用if语句)。
不定长参数(可变参数):
在函数参数前面加 “ * ” 将该参数定义为不定长参数,如:
关键字参数:
关键字实参是传递参数时使用“名称-值”对的方式,在实参中将名称和值关联起来。
· 关键字实参无需考虑函数调用中的实参顺序。
·· 关键字参数有扩展函数的功能。
命名关键字参数:
限制关键参数的名字。
· “ * ” 表示不定长参数, “ ** ” 表示不定长的关键字参数。
参数组合:
定义函数时可以用——必选参数、默认参数、可变参数、关键字参数和命名关键字参数。
· 定义的顺序——必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
例 :
def func(a, b, c=0, *args, **kw):
print('a=', a, 'b=', b, 'c=', c, 'args=', args, 'kw=', kw)
func(1, 2)
# 输出结果:a= 1 b= 2 c= 0 args= () kw= {}
func(1, 2, c=3)
# 输出结果:a= 1 b= 2 c= 3 args= () kw= {}
func(1, 2, 3, 'a', 'b')
# 输出结果:a= 1 b= 2 c= 3 args= ('a', 'b') kw= {}
func(1, 2, 3, 'a', 'b', x=4)
# 输出结果:a= 1 b= 2 c= 3 args= ('a', 'b') kw= {'x': 4}
args = (1, 2, 3, 4)
kw = {'x': 5}
func(*args, **kw)
# 输出结果:a= 1 b= 2 c= 3 args= (4,) kw= {'x': 5}
函数式编程:
是一种编程范式,是面向数学的抽象,其将计算描述为一种表达式求值。
函数式编程中的“函数”不是指计算机中的函数,而是指数学中的函数,即自变量的映射。
· 函数式编程特点——允许把函数本身作为参数传入另一个函数,也允许返回一个函数。
高阶函数:
接受函数为参数,或者把函数作为结果返回的函数,如:
· 最为人熟知的高阶函数有map、filter、reduce、apply(过时)。
匿名函数:
即不在使用def语句标准形式定义的函数,如lambad,该表达式用法为:
例: