1. 匿名函数
lambda [arg1 [,arg2,.....argn]]:expression
lambda 函数是不需要使用 def 语句定义的一个简易函数,其语法只包含一个语句。
- lambda 只是一个表达式,函数体比 def 简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
>>> double=lambda x:x*2 >>> double(5) 10
x 是lambda函数的参数,将返回表达式 x*2 的值。
相当于:
def double(x): return x * 2
lambda 函数通常与内置函数 map()、filter() 等联合使用。
>>> my_list = [1, 5, 4, 6, 8, 11, 3, 12] >>> new_list = list(filter(lambda x:x%2==0, my_list)) # 筛选出my_list中的所有偶数元素 >>> print(new_list) [4, 6, 8, 12]
2. Python 中的一些常用函数
1) map() 函数
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
语法:
map(function, iterable, ...)
返回值:
python2 返回一个列表
python3 返回一个迭代器
>>> def square(x):
return x**2
>>> my_list = [1, 5, 4, 6, 8, 11, 3, 12]
>>> map(square,my_list) # 返回一个可迭代的 map 对象,可使用 list() 将其转换为列表;square 是一个函数引用,没有括号
<map object at 0x0000020F48D04EF0>
>>> list(map(square,my_list))
[1, 25, 16, 36, 64, 121, 9, 144]
>>> list(map(lambda x:x**2,my_list)) # 使用匿名函数 lambda 计算平方数
[1, 25, 16, 36, 64, 121, 9, 144]
map() 函数可以包含多个序列:
>>> list(map(lambda x,y:x+y,my_list,new_list)) [3, 8, 9, 13, 16, 30, 16, 14]
如果函数有多个参数, 但每个参数的序列元素数量不一样, 会根据最少元素的序列进行:
>>> listx = [1,2,3,4,5,6,7] # 7 个元素 >>> listy = [2,3,4,5,6,7] # 6 个元素 >>> listz = [100,100,100,100] # 4 个元素 >>> list_result = map(lambda x,y,z : x**2 + y + z,listx, listy, listz) >>> print(list(list_result)) [103, 107, 113, 121]
2) filter() 函数
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该函数接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到 新列表中
语法
filter(function, iterable)
返回值:
python2 返回一个列表
python3 返回一个迭代器
>>> my_list = [1, 5, 4, 6, 8, 11, 3, 12] >>> new_list = list(filter(lambda x:x%2==0, my_list)) # 筛选出my_list中的所有偶数元素 >>> print(new_list) [4, 6, 8, 12]
3) reduce() 函数
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操 作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
语法:
reduce(function, iterable[, initializer])
参数
- function -- 函数,有两个参数
- iterable -- 可迭代对象
- initializer -- 可选,初始参数
返回值
返回函数计算结果。
在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 fucntools 模块里,如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数。
>>> import functools >>> result=functools.reduce(lambda x,y:x+y,range(1,101)) # 1-100 数列和 >>> print(result) 5050
阶乘:
>>> result=functools.reduce(lambda x,y:x*y,range(1,6)) # 5! 阶乘 >>> print(result) 120
4) sum() 函数
sum() 方法对序列进行求和计算。
语法:
sum(iterable[, start])
参数
iterable -- 可迭代对象,如:列表、元组、集合。
start -- 指定相加的参数,如果没有设置这个值,默认为0。
返回值
返回计算结果。
>>> my_list = [1, 5, 4, 6, 8, 11, 3, 12] >>> sum(my_list) 50
5) max(), min() 函数
max() 方法返回给定参数的最大值,参数可以为序列。
min() 方法返回给定参数的最小值,参数可以为序列。
max( x, y, z, .... )
>>> max(-10,10,40) 40 >>> min(-10,10,40) -10
>>> my_list = [1, 5, 4, 6, 8, 11, 3, 12] >>> max(my_list) 12 >>> min(my_list) 1
>>> a=[(1,2),(2,3),(3,4)] #比较元组列表 >>> max(a) #按照元组的第一个元素进行比较,如果第一个元素相同,则比较第二个元素 (3, 4) >>> a=[('a',1),('A',1)] ('a', 1)
6) sorted() 函数
sorted() 函数对所有可迭代的对象进行排序。排序时不影响原数据,产生新的排序数据
sorted(iterable[, cmp[, key[, reverse]]])
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
- 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
- enumerate多用于在for循环中得到计数,例如对于一个seq,得到:
-
- 1
- enumerate()返回的是一个enumerate对象,例如: