函数(二)

2020-09-22 10:26:18 浏览数 (1)

一、函数参数

1.定义函数的参数:固定参数/可变参数

定义函数时,参数可以有两种;一种是在参数表中写明参数名key的参数,固定了顺序和数量,如:

• def func(key1, key2, key3…):

• def func(key1, key2=value2…)

另一种是定义时还不知道会有多少参数传入的可变参数,如:

• def func(*args): #不带key的多个无名参数

• def func(**kwargs): #key=val形式的多个命名参数

2. 调用函数的参数:位置参数/关键字参数

调用函数的时候,可以传进两种参数;一种是没有名字的位置参数,如func(arg1,arg2, arg3…),会按照前后顺序对应到函数参数。

另一种是带key的关键字参数,如func(key1=arg1,key2=arg2…),由于指定了key,可不按顺序对应。如果混用,所有位置参数必在前,关键字参数必在后。

3.调用函数的参数:解包

对于有多个参数的函数,可以单个序列或字典“解包”对应到每个参数,如:func(*aseq):序列解包对应到每个位置参数,func(**adict):字典解包对应到每个关键字参数。

二、函数式编程

相对于复杂算法步骤的编程范式,函数式编程通过表达式和函数的操作来定义函数,强调对结果的描述,而不是过程,不会有副作用(影响函数之外的数据,如全局变量),函数可以是变量的值,函数可以作为参数传递,函数可以作为返回值,经常使用递归定义,而不是迭代和循环。

三、map函数

有时候,需要对列表中每个元素做一个相同的处理,得到新列表,例如所有数据乘以3 ;例如所有字符串转换为整数;例如两个列表对应值相加。map(func, list1, list2….),函数func有几个参数,后面就跟几个列表。

四、函数表达式:lambda

• 有时候,函数只用一次,其名称也就不重要,可以无需费神去def一个

• Lambda表达式可以返回一个匿名函数:lambda <参数表>:<表达式>

五、函数作为参数:reduce函数

reduce函数对列表进行滚动式处理,最终得到一个值,例如,累加,累乘等等。reduce(func, list) 相当于:func(func(func(list1,list2),list3),list4)....reduce(lambda x, y: x y, [1, 2, 3, 4, 5])相当于:((((1 2) 3) 4) 5)。

六、函数作为参数:filter函数

filter函数对数据集中的对象逐个调用func,如果结果为真,则保留这个对象;否则抛弃这个对象。

0 人点赞