打印出斐波那契系列

打印出斐波那契系列,第1张

打印出斐波那契系列

Python根据 绑定行为 确定编译时变量的范围。如果您分配一个名称,或将其用作

import
目标(以及其他几种方式),则将名称绑定在范围中。

您绑定到该函数

n_1
n_2
在其中
fib()
;两者都被分配给。这使这两个名称在中成为 本地
名称
fib()
,Python甚至不会查看周围的范围。

您需要覆盖此行为,并且可以使用以下

nonlocal
语句来做到这一点:

def fibGen():    n_1 = 0    n_2 = 0     def fib():        nonlocal n_1, n_2        if n_1 ==0 and n_2 ==0: n_1 = 1 return n        else: n = n_1 + n_2 n_2 = n_1 n_1 = n   return n    return fib

nonlocal
明确 告诉编译器您不希望它查看绑定行为,而是将名称视为闭包。

接下来,您将

n
if
测试的第一个分支中使用,但尚未在
else
分支之外的任何地方定义它。
1
无论如何,您应该只返回那里:

def fibGen():    n_1 = 0    n_2 = 0     def fib():        nonlocal n_1, n_2        if n_1 ==0 and n_2 ==0: n_1 = 1 return n_1        else: n = n_1 + n_2 n_2 = n_1 n_1 = n   return n    return fib

最后但并非最不重要的一点是,您可以使用元组分配交换两个变量,而无需任何中介:

def fibGen():    n_1 = 0    n_2 = 0     def fib():        nonlocal n_1, n_2        if n_1 ==0 and n_2 ==0: n_1 = 1        else: n_1, n_2 = n_1 + n_2, n_1        return n_1    return fib


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5667765.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存