1、map函数:传入两个参数,一个函数,一个可迭代对象。将函数依次作用于可迭代对象并把结果作为新的生成器返回。
>>> def f(x):
... return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
2、reduce函数:传入两个参数,
一个函数,一个序列,该函数必须接收两个参数,reduce把结果和序列的下一个元素做累积计算。
>>> from functools import reduce
>>> def fn(x, y):
... return x * 10 + y
...
>>> reduce(fn, [1, 3, 5, 7, 9])
13579
注:
python 3.0以后, reduce已经不在built-in function里了, 要用它就得from functools import reduce
附:做练习题时学到两个函数
(2)pow()返回x的y次方的值
pow( x, y )
(2)、index() 方法检测字符串中是否包含子字符串 str
str.index(str, beg=0, end=len(string)) str -- 指定检索的字符串、beg -- 开始索引,默认为0、end -- 结束索引,默认为字符串的长度。
3、filter函数:用于筛选序列,两个参数,一个函数,一个序列。函数作用于每个序列,根据结果返回是True还是False决定是保留还是丢弃该元素。最终返回的是一个生成器,惰性序列。
求素数例子:
def _odd_iter():
n = 1
while True:
n = n + 2
yield n
def _not_divisible(n):
return lambda x: x % n > 0
def primes():
yield 2
it = _odd_iter() # 初始序列
while True:
n = next(it) # 返回序列的第一个数
yield n
it = filter(_not_divisible(n), it) # 构造新序列
# 打印1000以内的素数:
for n in primes():
if n < 1000:
print(n)
else:
break
例子中_not_divisible()函数中x变量怎样理解?
_not_disivible()函数体中包含了一个匿名函数,在理解传值过程做了实验:
(1)、传一个值,如:_not_disivible(26),提示:
<function _not_disivible.<locals>.<lambda> at 0x7f5a45fde378>
(2)、()内传两个值,如:_not_disivible(26,2)。提示:
TypeError: _not_disivible() takes 1 positional argument but 2 were given
(3)、传两个值,如:_not_disivible(2)(4),提示:
False
(4)、传两个值,如:_not_disivible(2)(5),提示:
True
综上:定义的函数中包含匿名函数时,传的参数有两个,里面的参数是传给定义的函数,外面的参数传匿名函数。
上述求素数的例子,n对应n,x对应it。
4、sorted函数:排序算法
sorted函数原型:
sotred(Iterable,[cmp,key,reverse=True])
第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表(list)。
可选的参数有三个,cmp、key和reverse。
1)cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个负数;如果第一个参数等于第二个参数,返回零;如果第一个参数大于第二个参数,返回一个正数。默认值为None。
2)key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None。
3)reverse是一个布尔值。如果设置为True,列表元素将被倒序排列。
key参数的值应该是一个函数,这个函数接收一个参数并且返回一个用于比较的关键字。对复杂对象的比较通常是使用对象的切片作为关键字。例如:
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda s: s[2]) #按年龄排序
# [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]