鱼C论坛

 找回密码
 立即注册
查看: 2382|回复: 0

[学习笔记] 函数-高阶函数

[复制链接]
发表于 2023-3-15 22:08:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> # 函数是可以被当作变量一样自由使用的,那么当一个函数接收另一个函数作为参数的时候,这种函数就称之为高阶函数。
>>> import functools
>>> def add(x, y):
...         return x + y
...
>>> functools.reduce(add, [1, 2, 3, 4, 5])
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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 02:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表