繁体   English   中英

Python如何引用变量

[英]Python how to reference variable

在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:局部变量'位置'引用了berofe分配

有问题的行实际上是position = s_final函数中的position = s_final build_message

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

但是在这种情况下,它是模棱两可的,因为您稍后将重新分配给positionposition = s_final )。

您应该重新考虑代码的设计,或者将global position添加为build_message的第一行。 请记住,正如它所说,它将使position成为全局变量,并且build_message将在整个代码中的每个position更改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

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

def build_message(signal):
    global position
    message = position

如果在函数中使用外部变量,则应该考虑将其作为参数传递,例如:

def build_message(signal,position):
    pass

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM