Python学习之 ---高阶函数+map()函数+filter()函数+zip()函数

高阶函数

一等公民 First-Class Object

● 函数在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 函数

定义:
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 类似筛子,过滤元素

定义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 函数

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)]

猜你喜欢

转载自blog.csdn.net/qq_40498551/article/details/89467286