在赋值之前引用的Python变量

时间:2015-06-06 01:31:17

标签: python variables pygame

这是我正在使用的代码

import pygame

global lead_x
global lead_y
global lead_x_change
global lead_y_change

lead_x = 300
lead_y = 300
lead_x_change = 0
lead_y_change = 0


def playerUpdateMovement():
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        lead_x_change = -1
    elif keys[pygame.K_RIGHT]:
        lead_x_change = 1
    else:
        lead_x_change = 0

    if keys[pygame.K_UP]:
        lead_y_change = -1
    elif keys[pygame.K_DOWN]:
        lead_y_change = 1
    else:
        lead_y_change = 0

    lead_x += lead_x_change
    lead_y += lead_y_change

当我因任何原因运行此脚本时,我收到错误...

“第30行......赋值前引用的局部变量lead_x”

不能在函数中调用全局变量吗?这很奇怪,我是python的新手,谢谢。

3 个答案:

答案 0 :(得分:1)

Python对" global"的处理变量确实有点奇怪,特别是如果你不习惯它。

针对您的问题的简单修复是将global声明移到每个使用这些变量的函数中。所以:

def playerUpdateMovement():
    global lead_x
    global lead_y
    global lead_x_change
    global lead_y_change

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        lead_x_change = -1

这告诉Python你在lead_x_change函数中使用playerUpdateMovement实际上是对全局变量的引用,而不是使用局部变量(同名),这是默认治疗。

答案 1 :(得分:1)

如果您需要在函数内部修改全局变量,则需要在任何赋值之前使用全局关键字: global lead_x

答案 2 :(得分:0)

Python不需要以任何特殊方式声明的全局变量。只需像在第二块代码中那样在顶部声明和初始化变量。然后将global声明移到每个更改全局的方法中。所以你可以剪掉你的第一块并粘贴到你的方法中。

请注意,要阅读全局,您不需要使用global关键字。这可以帮助保持常量不变,因为Python不会特别处理常量。