欢迎访问宙启技术站
智能推送

Python中的高阶函数及其应用技巧

发布时间:2023-06-26 22:12:19

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编程中的实践有所帮助。