Python:理解不熟悉的函数语法(来自UC Berkeley CS61A)

Python:理解不熟悉的函数语法(来自UC Berkeley CS61A),python,syntax,parameters,lambda,optional-parameters,Python,Syntax,Parameters,Lambda,Optional Parameters,我不能不看答案键就完成这个问题的大部分,所以我想我可以在这里提问。坦白地说,我在理解没有参数的函数时总是遇到问题,每当我看到一个参数时,我就会想,“哦!它们一定是指“打印”函数!”而实际上我是在过度复杂化 至于练习5,我甚至不知道如何计算表达式。我觉得这是一个简单的问题,但我无法计算出其中任何一个问题的答案 练习4:一把函数 对于以下每个表达式,f必须是什么才能成功计算表达式,而不会导致错误?为每个表达式定义f,以便计算表达式不会导致错误 f f() f(3) f()() f()(3)()

我不能不看答案键就完成这个问题的大部分,所以我想我可以在这里提问。坦白地说,我在理解没有参数的函数时总是遇到问题,每当我看到一个参数时,我就会想,“哦!它们一定是指“打印”函数!”而实际上我是在过度复杂化


至于练习5,我甚至不知道如何计算表达式。我觉得这是一个简单的问题,但我无法计算出其中任何一个问题的答案

练习4:一把函数

对于以下每个表达式,f必须是什么才能成功计算表达式,而不会导致错误?为每个表达式定义f,以便计算表达式不会导致错误

f
f()
f(3)
f()()
f()(3)() 
解决方案

f = 3
f = lambda: 3
f = lambda x: x
f = lambda: lambda: 3
f = lambda: lambda x: lambda: x
练习5:再练习几次

使用给定的t和s值,求出以下三个表达式的值

t = lambda f: lambda x: f(f(f(x)))
s = lambda x: x + 1

t(s)(0) # 1

t(t(s))(0) # 2

t(t)(s)(0) # 3
解决方案

f = 3
f = lambda: 3
f = lambda x: x
f = lambda: lambda: 3
f = lambda: lambda x: lambda: x
1)3

2)9


27对于练习4,您将获得以下问题和答案

Q:
f

A:
f=3

这本质上是变量赋值

Q:
f()

A:
f=lambda:3

这类似于不接受任何参数并返回值3的函数

Q:
f(3)

A:
f=lambda x:x

这类似于接受参数
x
并返回值
x
的函数。因此,您将获得值
3
,并返回值
3

Q:
f()()

A:
f=lambda:lambda:3

这类似于一个不接受任何参数并返回另一个同样不接受任何参数的函数,该函数将返回值
3

Q:
f()(3)(

A:
f=lambda:lambda x:lambda:x

与前面的示例一样,这将返回
3
。有一个函数不接受参数,但返回另一个函数,该函数接受值
x
,并返回另一个函数,该函数不接受参数,但返回值
x

通过以上示例,您可以以类似的方式解决练习5


此外,ChrisP在评论中对练习5进行了很好的解释。

浏览每一行的执行情况
t(s)(0)
表示首先调用
t
,并将
s
作为参数;结果将是调用三次的函数
x+1
(使用上一次调用的结果作为下一次调用的参数)。然后将0传递给该函数,结果是
((0+1)+1)+1
,等于3。尝试单独执行每个表达式的各个部分,并使用生成的函数来理解它们的行为。现在还不清楚你想要的答案是什么。“如何计算表达式”-主要是从左到右:)用结果替换每个函数调用,然后向右进行。一个接一个。不确定你的实际问题是什么。好的,除了练习5的最后一部分,现在一切都有意义了@ChrisP,我如何评估t(t)(s)(0)?我得到了答案“12”,但不确定如何。。。尽管如此,这是错误的。