警告:极端新手问题
我似乎一直在将函数视为食谱。在我的世界里,程序是一个食谱盒,一些食谱(功能)调用其他食谱(其他功能)。处理器通过将指令写入 RAM 并处理它们来开始执行主配方。比如早餐薄饼。你叫 Julia Childs 的早餐薄饼食谱。你必须做一次可丽饼面糊。然后,当你还有可丽饼面糊时,你会反复制作可丽饼。同时,您可以制作各种水果制品。
好吧,我显然不明白。我刚刚通过 pythontutor.com 运行 python wiki 解决方案来解决 Project Euler Problem 2(偶数斐波那契数小于 400 万的总和)。我认为我发生了一些事情。似乎每次你想出一个食谱时,你不只是使用相同的处理器,你会得到一个带有一些罐子的侏儒来处理那个功能。罐子是变量,gnome 计算出他的配方,如果调用函数期望返回值,则 gnome 将这些罐子的内容显示给调用者。然后调用者可能会返回,找出更多的东西,并向他的调用者显示返回值。
假设 Al 打电话给 Bob 做薄饼。鲍勃做了面糊并叫查理做饭。查理做了一个可丽饼,把可丽饼端给鲍勃,鲍勃把它给了艾尔,然后又回到查理身边。谁还在!艾尔不知道鲍勃把查理藏在厨房里,但即使在查理做了第一个可丽饼之后,他仍然在厨房里,知道如何制作可丽饼,并且知道他还剩下多少可丽饼面糊。即使他已经退回了第一个可丽饼。
有人可以帮我解决这个问题吗?
这是来自 Python wiki 的代码
def fib():
x,y = 0,1
while True:
yield x
x,y = y, x+y
def even(seq):
for number in seq:
if not number % 2:
yield number
def under_a_million(seq):
for number in seq:
if number > 1000000:
break
yield number
print sum(even(under_a_million(fib())))