BrightXiong 发表于 2023-3-15 22:08:57

函数-高阶函数

>>> # 函数是可以被当作变量一样自由使用的,那么当一个函数接收另一个函数作为参数的时候,这种函数就称之为高阶函数。
>>> import functools
>>> def add(x, y):
...         return x + y
...
>>> functools.reduce(add, )
15
>>> # 它的第一个参数是指定一个函数,这个函数必须接收两个参数,然后第二个参数是一个可迭代对象,reduce() 函数的作用就是将可迭代对象中的元素依次传递到第一个参数指定的函数中,最终返回累积的结果。
>>> # 相当于
>>> add(add(add(add(1, 2), 3), 4), 5)
15
>>> # 将 reduce() 函数的第一个参数写成 lambda 表达式,代码就更加极客了,比如我们要计算 10 的阶乘
>>> functools.reduce(lambda x, y : x*y, range(1, 11))
3628800
>>> # 偏函数是对指定函数的二次包装,通常是将现有函数的部分参数预先绑定,从而得到一个新的函数,该函数就称为偏函数
>>> square = functools.partial(pow, exp=2)
>>> sqaure(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sqaure' is not defined
>>> square(2)
4
>>> square(3)
9
>>> cube = functools.partial(pow, exp=3)
>>> cube(3)
27
>>> # @wraps 装饰器
>>> import time
>>>
>>> def time_master(func):
...         def call_func():
...                 print("开始运行程序。。。")
...                 start = time.time()
...                 func()
...                 stop = time.time()
...                 print("结束运行。。。")
...                 print(f"一共耗费了{(stop - start):.2f} 秒。")
...         return call_func
...
>>> @time_master
... def myfunc():
...         time.sleep(3)
...         print("I love you")
...
>>> myfunc()
开始运行程序。。。
I love you
结束运行。。。
一共耗费了3.01 秒。
>>> myfunc.__name__
'call_func'


>>> import time
import functools
   
def time_master(func):
    @functools.wraps(func)
    def call_func():
      print("开始运行程序...")
      start = time.time()
      func()
      stop = time.time()
      print("结束程序运行...")
      print(f"一共耗费了 {(stop-start):.2f} 秒。")
    return call_func
   
@time_master
def myfunc():
    time.sleep(2)
    print("I love FishC.")
   
myfunc()
页: [1]
查看完整版本: 函数-高阶函数