● 函数在Python 是一等公民
● 函数也是对象,是可调用对象
● 函数可以作为普通变量,也可以作为函数参数,返回值
高阶函数(High-Order Function)
● 数学概念,y= f(x)
● 在数学和计算科学中,高阶函数应但是至少满足下面一个条件的函数
◇ 接受一个或多个函数作为参数
◇ 输出一个函数
def counter (base):
def inc(step=1):
nonlocal base
base+=step
return base
return inc #返回的是函数对象,不是return inc() ,并没有调用函数
c1= counter(10)
c2=counter(10)
c1==c2?# 返回的是两个不同的函数,所以不等
>>> False
def inc(step=1):
return 1
def counter(bsse):
return inc
c1=counter(10)# 这里返回的仍然是函数,所以c1=c2
c2=counter(10)
c1==c2?
>>> True
定义:
map(func, *iterables) --> map object
举例:
map(lambda x:x+1,list(range(10)))# 返回一个生成器,从列表中选出的[0-9]的数,给lambda函数,然后依次加1后生成一个生成器,需要时会返回一个值.
dict(map(lambda x: (x%5, x), range(500)))
>>> {0: 495, 1: 496, 2: 497, 3: 498, 4: 499}
dict(map(lambda x,y: (x,y), 'abcde', range(10))) # 木桶原理,已少的为标准
>>> {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4}
dict(map(lambda x,y:{x,y},'abcde',range(10))) # 集合是无序的,所以不能保证谁在前谁在后
>>> {0: 'a', 1: 'b', 'c': 2, 'd': 3, 'e': 4}
filter 类似筛子,过滤元素
定义filter(function or None, iterable) --> filter object
● 对可迭代对象进行遍历,返回一个迭代器
● function参数是一个参数的函数,且返回值应当是bool类型,或其返回值等效布尔值。
● function参数如果是None,可迭代对象的每一个元素自身等效布尔值
list(filter (None ,range(0,10)))# 等效函数,if fn(element): yield element :等效True
list(filter(lambda x: x%3==0, [1,9,55,150,-3,78,28,123]))
list(filter(None, range(5)))
list(filter(None, range(-5, 5)))
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
>>>a = [1,2,3] #此处可迭代对象为列表
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
>>> zipped
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,可理解为解压
[(1, 2, 3), (4, 5, 6)]