Python如何引用变量

时间:2016-09-27 10:34:36

标签: python

我在python文件上引用变量时遇到问题。这是代码:

FG_E = 9
FG_R = 8
START = 7
READY = 9
MC = 3
BRAKE = 5
ERROR = 6
a = 2
b = 3

position = 0

def build_message(signal):
    message = position
    message = message | (0b1<<signal)
    s = bin(message)
    s = s[2:len(s)]
    s = (16-len(s))*'0' + s

    s0 = s[0:len(s)/2]
    s1 = s[len(s)/2:len(s)]
    s0 = s0[::-1]
    s1 = s1[::-1]
    s_final = int(s0 + s1, 2)
    position = s_final
    print bin(s_final)
    return s_final

build_message(FG_R)

我得到的错误是: UnboundLocalError:局部变量&#39; position&#39;参考berofe assigment

3 个答案:

答案 0 :(得分:3)

问题行在函数position = s_final中实际为build_message

如果不存在,则message = position将起作用,因为Python解释器会知道您引用的position变量。

但在这种情况下,它很模糊,因为您稍后会重新分配到positionposition = s_final)。

您应该重新考虑代码的设计,或者将global position添加为build_message中的第一行。请注意,正如它所说,它会使position成为一个全局变量,build_message会在整个代码中的每个位置更改position的值。

编辑快速演示:

global_var = 0

def foo1():
    print(global_var)

def foo2():
    print(global_var)
    global_var = 1

def foo3():
    global global_var
    print(global_var)
    global_var = 1
    print(global_var)

foo1()
>> 0

foo2()
>> UnboundLocalError: local variable 'global_var' referenced before assignment

foo3()
>> 0
   1

答案 1 :(得分:1)

您需要使用global关键字来访问全局变量。

def build_message(signal):
    global position
    message = position

答案 2 :(得分:0)

如果您将外部变量用于函数,您可以考虑将其作为参数传递,例如:

def build_message(signal,position):
    pass