经典面试题-Python的高阶函数有哪些,分别都有什么作用?

本文引用自霍格沃兹测试开发学社录播课

Python 的高阶函数有哪些,分别都有什么作用?

霍格沃兹测试开发学社
http://ceshiren.com

问题

面试官问:Python 的高阶函数有哪些,分别都有什么作用?

考察点分析

面试官主要的目的:

  • 是否使用过 python 中的高阶函数
  • 工作用过哪些高阶函数

技术点

这个问题涉及到的技术点:

  • python 中的高阶函数用法
  • python 常用的高阶函数 filter, sorted, map 等

什么是高阶函数

  • 一个函数可以作为参数传递给另外一个函数
  • 一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归)
  • 满足上面条件其一则为高阶函数
#参数为函数
def bar():
    print("in the bar..")
def foo(func):
    func()
    print("in the foo..")
foo(bar)
#返回值为函数
def bar():
    print("in the bar..")
def foo(func):
    print("in the foo..")
    return bar
res=foo(bar)
res()

python 中常用的高阶函数

  • filter 过滤
  • map 映射
  • sorted 排序

filter 过滤

  • filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
  • 语法:filter(function, iterable)
  • 参数:function(判断函数),iterable (可迭代对象)
  • 返回值:
    • Python 2.x 返回列表
    • Python 3.x 返回迭代器
# python 2.7
def is_odd(n):
    return n % 2 == 1
alist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(alist)
# python 3.x
def is_odd(n):
    return n % 2 == 1
alist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
newlist = list(alist)
print(newlist)

map 映射

  • 接收一个函数 f 和一个或多个序列 list,并通过把函数 f 依次作用在 序列 list 的每个元素上,得到一个新的 list 并返回。
  • 语法:map(function, iterable, …)
  • 参数:function – 函数,iterable – 一个或多个序列
  • 返回值:
    • Python 2.x 返回列表
    • Python 3.x 返回迭代器
# 计算平方数
def square(x) :
    return x ** 2
map_result = map(square, [1,2,3,4,5])
# 计算列表各个元素的平方值
print(list(map_result))

sorted 函数

  • 对所有可迭代的对象进行排序操作。
  • 语法:sorted(mylist, [reverse,key])
  • 参数:
    • mylist,需要被排序的可迭代对象
    • reverse 排序规则(reverse = True 降序 , reverse = False 升序(默认))
    • key:指定的函数将作用于 list 的每一个元素上,并根据 key 函数返回的结果进行排序
  • 返回值:返回重新排序的列表
>>> before=[1,4,2,5,0]
>>> after=sorted(before)
>>> after
[0, 1, 2, 4, 5]
>>> before
[1, 4, 2, 5, 0]
## 倒序排序
>>> after1=sorted(before,reverse=True)
>>> after1
[5, 4, 2, 1, 0]
## 使用规则排序,key为abs,对前面的一组数据取绝对值 ,然后再排序
>>> sorted([-1,4,3,2,0],key=abs)
[0, -1, 2, 3, 4]

总结

问题:Python 的高阶函数有哪些,分别都有什么作用?
python 中提供了一些内置的高阶函数,可以很方便的处理数据序列。
比如:对列表中的所有数据进行运算得到一组新的数据,对序列中的数据进行排序等等。不需要导包,可以直接拿过来使用,常用的 filter,map,sorted 等等。: