CS61A Higher-Order Functions 学习笔记

1.1 什么是Lambda表达式

square = lambda x: x * x

lambda < parametres >: < return expression>
lambda 是一个函数,形参为x, 返回值为x * x。
在这里插入图片描述

1.2 Lambda Expression和 Def statements的异同

(1)都可以用来创建函数,函数的功能、参数、行为相同;
(2)所创建函数都从属与上一级母框架;
(3)都将函数映射给相应的函数名,例如square。
(4)不同:lambda无固有函数名,函数名是后来赋予的,def的函数名是声明的时候就有了。

lambda表达式简洁但晦涩,一个参数和返回值的时候使用比较恰当。

1.3 返回值为函数

CS61A Higher-Order Functions 学习笔记_第1张图片

函数科里化(Function Currying)

即 部分绑定函数。柯里化的函数会先部分求值,即currying函数先接受一些参数,但是不会马上求值,而是返回另一个函数,刚刚传入的参数会形成闭包被保护起来,等到原本的currying函数真正求值的时候,之前传入的所有参数都会被用来求值。
通俗地说,就是一次性传给currying函数部分参数来调用它,返回另一个函数去处理剩下的参数。
例如:

def make_adder(n):
    return lambda k: n + k
make adder(2)(3)
add(2,3)

make_adder 的返回值是一个函数。

函数修饰器(Function Decorator)

函数修饰器是用来修改其他函数功能的一个函数

# 函数装饰器
@trace 1
def triple(x):
    return 3 * x

函数修饰器蓝本:

from functools import wraps
def decorator_name(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        if not can_run:
            return "Function will not run"
        return f(*args, **kwargs)
    return decorated
 
@decorator_name
def func():
    return("Function is running")
 
can_run = True
print(func())
# Output: Function is running
 
can_run = False
print(func())
# Output: Function will not run

参考链接:https://www.runoob.com/w3cnote/python-func-decorators.html

你可能感兴趣的:(CS61A Higher-Order Functions 学习笔记)