python 为什么我的变量是“赋值前引用”,但当我改变它被赋值的单词时却不是?

s4n0splo  于 2023-02-07  发布在  Python
关注(0)|答案(1)|浏览(164)

我有一个问题,这是一个问题的排序。
我正在制作一个手工程序来学习python,但是遇到了一个问题;我在开始时分配了变量,然后像您应该做的那样使用它们,但是它出现了一个错误消息"UnboundLocalError:赋值前引用的局部变量"vSaplings"。我尝试了许多不同的编写方法,但最后,我所要做的就是更改

vSaplings

v_Saplings

现在没有错误了。为什么要这样做呢?这只是添加了一个字符。
问题代码:

vSaplings = 20
...
elif reqO == "Twigs":
        print("This requires at least 1 sapling.")
        if vSaplings > 0:
            amountSaplings = input("How many saplings would you like to use to craft twigs? 1 sapling = 3 twigs.")

这会得到错误。将'vSaplings'更改为'v_Saplings'会删 debugging 误。为什么?
谢谢你。
编辑:我现在明白了它实际上需要是一个全局变量。那么还有一个问题,我需要在我创建的每一个函数中使我的变量都是全局变量吗?这似乎会占用很多空间。

fhg3lkii

fhg3lkii1#

你做过这样的事:

#This will NOT work
foo = 20

def f():
    if foo > 10:
        print 'hello'
    foo = foo + 1

这将触发未绑定本地错误。
为了解决这个问题,你可以做以下几件事中的一件。最简单的是这样的事情:

#This is OK
foo = 20

def f():
    global foo
    if foo > 10:
        print 'hello'
    foo = foo + 1

然而,一般来说,你应该使用avoid global variables,这有很多原因,其中大部分可以归结为“它使代码更难理解和维护,它更容易推理自包含函数,所以你可以考虑做一些类似这样的事情:

#Better (in the opinion of this poster)

def f(foo):
    if foo > 10:
        print 'hello'
    return foo + 1

然后可以从任何地方调用它,就像这样:

foo = f(foo)

相关问题