有很多帖子有类似的问题,但即使看完它们,我也无法理解背后的逻辑。对不起,我以前从未编程过。下面是两段代码——用于计算阶乘的递归函数。无论我传递 1 还是任何值,都会出现错误“赋值前引用的局部变量‘f’”。def func(n): if n != 1: f = n*func(n-1) else: return f但是,当我将代码更改为:def func(n): if n == 1: return 1 else: f = n*func(n-1) return f没有错误,程序运行。在这两种情况下,我都没有在分配之前初始化变量“f”,并且两者都只是函数的局部变量。只是想弄清楚我的基本概念。谢谢。
2 回答
心有法竹
TA贡献1866条经验 获得超5个赞
函数 1 -
def func(n): if n != 1: f = n*func(n-1) else: return f
在第一个函数中,
f
返回时可能仍未初始化(取决于输入)。您的第一个函数没有第二个函数中的基本情况。假设您传递的参数
n
不等于 1。if n != 1
条件将被评估为False
。else
那么还没有初始化的statement怎么返回f
呢?因此错误...
功能 2 -
def func(n): if n == 1: return 1 else: f = n*func(n-1) return f
但是,在您的第二个函数中,您将始终
f
在返回它之前进行初始化( n >= 1 )或进入无限递归( n < 1 )。无论如何,你不会在没有初始化的情况下返回它。所以它没有给出错误。
希望你明白为什么会出现错误。
HUWWW
TA贡献1874条经验 获得超12个赞
考虑这个功能:
def func(n): return f
很容易看出为什么这个函数会报错,因为f
它不存在。
在您的第一个函数中,如果n != 1
evaluates False
,它将表现得像我上面给出的示例函数。
正如@Mustafa Aydın 评论的那样,该错误与您的错误略有不同,UnboundLocalError
但概念仍然存在。
添加回答
举报
0/150
提交
取消