【问题标题】:Says I haven't declared, even though I clearly have [duplicate]说我还没有宣布,即使我清楚地有 [重复]
【发布时间】:2021-04-20 21:59:02
【问题描述】:

错误被称为:UnboundLocalError:在赋值之前引用了局部变量“P”。 我想要它,所以我可以用 K 和 L 更改笔宽,但它不会让我这样做。你能帮帮我吗?

from gturtle import*
keyK = 75
keyL = 76
P = 10

def colorKeys(key):
if key == keyK:
    P = P - 2
elif key == keyL:
    P = P + 2

makeTurtle(keyPressed = colorKeys)
hideTurtle()

while True:
    setPenWidth(P)

【问题讨论】:

    标签: python variables


    【解决方案1】:

    如果你真的想在函数中使用全局变量,你可以这样做:

    def colorKeys(key):
      global P
      if key == keyK:
          P = P - 2
      elif key == keyL:
          P = P + 2
    

    但通常这是一个坏主意。

    【讨论】:

    • 谢谢,帮了我!
    • 很高兴听到这个消息)如果您愿意,可以将我的答案标记为答案
    • @arseniy,知道 gturtle 是什么吗?我试图在另一篇文章中帮助他,但似乎无法弄清楚 gturtle 是什么。嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯
    • @kidwhowantstolearnpython 我想就是这样)tobiaskohn.ch/jython/turtle.html
    • 我想通了,但文档中只有 1 个示例代码,其中很多是有效的。 WTH
    【解决方案2】:

    在函数外部创建的变量可以在函数中正确引用,但不能修改。您必须将 P 设为全局,在 colorKeys 中定义它,或者像 key 一样将其传递给 colorKeys。

    【讨论】:

      【解决方案3】:

      您的函数colorKeys(key) 中没有局部变量 P。全局变量不能在没有'global'关键字的函数内被改变(不推荐使用'global'关键字)

      要解决此问题,您可以返回要添加到 P 的值:

      def colorKeys(key):
          if key == keyK:
              return -2
          elif key == keyL:
              return 2
          return 0
      
      P += colorKeys(key)
      

      【讨论】:

      • "全局变量不能在函数内改变"是的,如果你使用 global 语句,它们可以,但他们可能不应该,这是一个更好的解决方案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多