Python中的高阶函数及其应用技巧
Python是一种支持高阶函数的编程语言,这为程序员提供了很多有用的应用技巧。高阶函数是指可以接受其他函数作为参数并/或返回函数作为结果的函数。本文将介绍 Python 中的高阶函数及其应用技巧,帮助读者更好地理解这一特性。
1. map(), filter(), reduce()
Python内置函数map(), filter(), reduce()是常用的高阶函数,它们在处理数据时尤为方便:
map()函数用于对一个列表中所有元素执行同一个函数,返回的是一个包含所有结果的新列表。
filter()函数用于对一个列表中的元素应用谓词函数,返回一个列表,其中只包含结果为“true”的元素。
reduce()函数用于在一个列表中应用一个二进制函数,从而将这个列表归约为一个单一的结果。
示例:
1. 使用map()将一个列表中的所有元素从字符串转换为浮点数:
lst = ['1.2', '3.4', '5.6'] lst = list(map(float, lst))
2. 使用filter()从一个列表中提取出所有偶数:
lst = [1, 2, 3, 4, 5, 6] lst = list(filter(lambda x: x % 2 == 0, lst))
3. 使用reduce()计算一个列表中所有元素的和:
from functools import reduce lst = [1, 2, 3, 4, 5] lst_sum = reduce(lambda x, y: x+y, lst)
2. lambda表达式
lambda表达式是一种匿名函数,它可以在需要一个函数的地方定义一个函数,这样可以减少代码的复杂度。
示例:
1. 实现一个简单的lambda表达式,将参数x加上2:
add_two = lambda x : x + 2
2. 实现一个lambda表达式,用于对一个列表中的元素进行排序:
lst = [(1, 3), (2, 2), (3, 1)] lst.sort(key=lambda x: x[1])
3. 实现一个lambda表达式,用于对比两个字符串的长度:
lst = ['hello', 'world', 'apple', 'pear'] lst.sort(key=lambda x: len(x))
3. sorted()和sort()
sorted()和sort()都可以用于对数据进行排序,但它们之间有一定的区别。
sorted()是一个内置函数,用于对任何可迭代对象进行排序操作,返回一个新的排序好的列表。
sort()只适用于列表类型,它是一个列表方法,对原始列表进行排序操作,不会返回一个新的列表。
示例:
1. 使用sorted()对一个字符串列表进行排序操作:
lst = ['python', 'java', 'c', 'ruby'] sorted_lst = sorted(lst, key=len) print(sorted_lst)
输出结果为:['c', 'java', 'ruby', 'python']
2. 使用sort()对一个整数列表进行升序排序:
lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8] lst.sort() print(lst)
输出结果为:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 8, 9]
4. partial()和currying技巧
partial()函数是Python中一个非常有用的高阶函数,它可以创建一个新的函数,从已有的函数中派生,但指定了一些默认参数。
currying技巧是一种可以通过局部求值给函数参数赋值的技巧,其本质是一个函数接受部分参数来返回一个新的函数。
示例:
1. 使用partial()创建一个新的函数,从math库中的pow函数中派生,并指定两个默认参数(base=2和exp=5):
from functools import partial import math pow2 = partial(math.pow, base=2, exp=5) result = pow2() print(result)
输出结果为:32.0
2. 使用currying技巧,从一个相加函数中派生出一个函数,在使用操作数2调用该函数进行加法运算:
def add(a, b):
return a + b
add2 = lambda a: add(a, 2)
result = add2(3)
print(result)
输出结果为:5
5. wrap()函数
wrap()函数是Python中一个很有用的高阶函数,可以使用它来包装一个函数,使其在执行前插入一些操作,在执行后执行一些操作。这是一种非常有用的技巧,可以用于扩展现有函数的功能,或者添加一些通用的代码。
示例:
1. 使用wrap()函数,对一个函数在执行前后分别打印“Starting...”和“Ending...”:
from functools import wraps
def my_decorator(f):
@wraps(f)
def wrapper(*args, **kwds):
print('Starting...')
result = f(*args, **kwds)
print('Ending...')
return result
return wrapper
@my_decorator
def say_hello():
print('Hello!')
say_hello()
输出结果为:
Starting...
Hello!
Ending...
本文介绍了Python中的高阶函数及其应用技巧,希望可以对读者在Python编程中的实践有所帮助。
