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

Python高级函数特性:匿名函数、高阶函数和装饰器

发布时间:2023-06-22 21:48:36

在Python中,函数是一等公民(first-class function),也就是说函数可以像变量一样被传递、保存和调用。这种特性使得Python非常强大和灵活,对于编写复杂的程序和数据分析非常有帮助。其中,Python高级函数特性包括匿名函数、高阶函数和装饰器。

一、匿名函数

在Python中,我们可以使用lambda关键字定义匿名函数。匿名函数没有函数名,只能包含一个表达式,返回值即为该表达式的结果。

举个例子,我们定义一个正常的函数:

def add(x, y):
    return x + y

这个函数可以改写成一个匿名函数:

add = lambda x, y: x + y

我们可以看到,使用lambda关键字定义函数,并没给函数命名,而是将其赋给一个变量名。这个也是匿名函数的实现原理。

lambda表达式的语法格式为:lambda 参数列表: 表达式

下面再给出一个例子:

f = lambda x: x**2
print(f(2))  # 4

这个匿名函数接受一个参数x,并返回x的平方。

二、高阶函数

高阶函数指的是函数可以作为参数传递给另一个函数,或者函数可以作为返回值返回。在Python中,许多内置函数都是高阶函数,例如map、filter、reduce等。

1、map函数

map函数以一个函数和一个可迭代对象作为参数,将这个函数逐一作用于可迭代对象的每个元素,并返回一个列表。

例如,我们可以使用map将列表中的每个元素加1:

lst = [1,2,3,4,5]
f = lambda x:x +1
result = map(f, lst)
print(list(result))  # [2, 3, 4, 5, 6]

2、filter函数

filter函数以一个函数和一个可迭代对象作为参数,将这个函数逐一作用于可迭代对象的每个元素,并返回该函数返回值为True的元素列表。

例如,我们可以使用filter函数筛选出列表中所有的偶数:

lst = [1,2,3,4,5,6,7,8,9]
f = lambda x: x%2 == 0
result = filter(f, lst)
print(list(result))  # [2, 4, 6, 8]

3、reduce函数

reduce函数以一个函数和一个可迭代对象作为参数,将这个函数逐一作用于可迭代对象的每个元素,并返回一个累加结果。

例如,我们可以使用reduce函数将一个列表中的所有元素相加:

from functools import reduce

lst = [1,2,3,4,5]
f = lambda x,y: x+y
result = reduce(f, lst)
print(result)  # 15

三、装饰器

装饰器是Python中的一种高级函数特性,它可以动态地修改函数或类的行为,同时不改变其原有的代码。通俗来说,装饰器是在不改变函数本身的代码的前提下,动态地修改函数的行为。

Decorator通过特殊的语法“@staticmethod”和“@classmethod”,可以装饰类的静态方法和类方法。

例如,我们可以使用一个装饰器,输出函数的执行时间:

import time

def time_it(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print('远行%s花费的时间为%s秒' %(func.__name__, end-start))
        return result
    return wrapper

@time_it
def do_something():
    total = 0
    for i in range(10000000):
        total += i
    return total

do_something()

在这个例子中,我们使用了一个装饰器time_it来装饰函数do_something。

我们定义了一个叫做time_it的函数,它返回了一个名为wrapper的函数。在wrapper中,我们计算了函数do_something()执行的时间,并输出执行时间。然后返回了函数do_something()的返回值。

装饰器的使用方式是在函数定义前加上@decorator的方式,如上面的例子所示。这样,我们就不需要修改函数do_something()本身的代码,就可以输出该函数的执行时间。

总结

Python高级函数特性包括匿名函数、高阶函数和装饰器。这些特性可以帮助Python开发者提高代码的可读性和简洁性,同时也能够提高代码的效率,提升开发效率。掌握这些特性,可以使Python编程更加容易和高效。