UCB CS61a Dicussion 02 Python

本文介绍了UCBCS61A课程中的lambda表达式概念,展示了如何创建和使用lambda函数,以及它们在环境图中的表示。此外,文章讨论了柯里化(Currying)和如何转换多参数函数。还通过示例解释了高阶函数在环境图中的行为,并提供了编写高阶函数的练习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:本文内容来源于UCB CS61A课程,详情请点击CS 61A: Structure and Interpretation of Computer Programs


前言

本文为UCB CS61a 课程 Dicussion02内容


以下是本篇文章正文内容,叙述部分参考Disc 02: Higher-Order Functions,由本人与chatgpt共同翻译,作业部分为作者完成,仅供参考,若有错误欢迎评论指正

CS61a Disc02

Lambda expressions

lambda表达式通过求值可以得到一个函数,该函数叫做lambda函数

如,lambda y: x + y就是一个lambda表达式,该表达式可以读作:

一个函数,该函数接受一个参数y,返回了x + y

表达式本身会被求值为一个函数,但不会被绑定到一个变量名上

与def语句定义函数类似,lambda函数的返回表达式(冒号右边的部分)直到lambda函数被调用时才会被求值(恰似def定义的函数直到调用时才会执行其函数体)

>>> what = lambda x : x + 5
>>> what
<function <lambda> at 0xf3f490>

与def语句不同,lambda表达式即可作为操作符也可以作为操作数(因为其是一个会被求值为函数的单行表达式)

>>> (lambda y: y + 5)(4)
9
>>> (lambda f, x: f(x))(lambda y: y + 1, 10)
11

柯里化 Curring

柯里化是高阶函数的一个重要应用,其可以将一个多参数函数转换为一系列接受单个参数的函数

如以下函数将pow函数转换为它的柯里化形式

>>> def curried_pow(x):
...     def h(y):
...         return pow(x, y)
...     return h
>>> curried_pow(2)(3) # curried_pow(底数)(质数)
8
>>> two_s_power = curried_pow(2) # 相当于y = 2 ^ x,当该方程被大量需要时,将其柯里化可以避免在pow中不断传入参数2
>>> two_s_power(3)
8

环境图中的高阶函数

环境图可以跟踪所有已定义的变量及其绑定的值。这些值不一定仅限于整数和字符串。环境图还可以模拟使用高阶函数的复杂程序

lambda函数在环境图中的表示于函数类似,但由于没有固定的名称,因此用符号λ表示

func <函数名>(参数) [parent=定义该函数的父环境]

func λ(参数) <line lambda表达式所在行的行号> [parent=lambda表达式所在的父环境]

任何函数(包括 lambda 表达式)的父环境始终是定义该函数的帧。在环境图中需要包含函数的父环境信息,以便查找当前帧中未定义的变量。

Question

1.1 和 1.2

1.1要求画出给出代码块的环境图,此处不作答,有需求者复制代码到pythontutor查看

def 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值