难以理解“赋值前引用的局部变量”

有很多帖子有类似的问题,但即使看完它们,我也无法理解背后的逻辑。对不起,我以前从未编程过。下面是两段代码——用于计算阶乘的递归函数。无论我传递 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”,并且两者都只是函数的局部变量。只是想弄清楚我的基本概念。谢谢。


素胚勾勒不出你
浏览 176回答 2
2回答

心有法竹

函数 1 -def&nbsp;func(n):&nbsp;&nbsp; &nbsp;&nbsp;if&nbsp;n&nbsp;!=&nbsp;1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f&nbsp;=&nbsp;n*func(n-1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;f在第一个函数中,f返回时可能仍未初始化(取决于输入)。您的第一个函数没有第二个函数中的基本情况。假设您传递的参数n不等于 1。if n != 1条件将被评估为False。else那么还没有初始化的statement怎么返回f呢?因此错误...功能 2 -def&nbsp;func(n): &nbsp;if&nbsp;n&nbsp;==&nbsp;1:&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;else:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f&nbsp;=&nbsp;n*func(n-1)&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;f但是,在您的第二个函数中,您将始终f在返回它之前进行初始化( n >= 1 )或进入无限递归( n < 1 )。无论如何,你不会在没有初始化的情况下返回它。所以它没有给出错误。希望你明白为什么会出现错误。

HUWWW

考虑这个功能:def&nbsp;func(n):&nbsp; &nbsp;&nbsp;&nbsp;return&nbsp;f很容易看出为什么这个函数会报错,因为f它不存在。在您的第一个函数中,如果n != 1evaluates&nbsp;False,它将表现得像我上面给出的示例函数。正如@Mustafa Aydın 评论的那样,该错误与您的错误略有不同,UnboundLocalError但概念仍然存在。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python