2016-09-27 9 views
0

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:ローカル変数「」位置参照berofeのassigment

+1

'ためposition'変数 –

+0

を使用する前に、'関数内でグローバルposition'を与えますより多くの理解を参照してくださいhttp://www.python-course.eu/python3_global_vs_local_variables.php –

+0

変数に意味のある名前を付けてください。 –

答えて

3

問題のある行は、実際にposition = s_final機能build_messageです。

もしそこにいなければ、message = positionは、Pythonインタプリタがあなたが参照している変数のどれがpositionであるかを知るために働きます。

この場合、後でpositionposition = s_final)に再割り当てするため、あいまいです。

コードのデザインを考え直すか、build_messageの最初の行にglobal positionを追加する必要があります。つまり、positionはグローバル変数になり、build_messageはコード全体でpositionの値を変更します。

EDIT迅速なデモ:

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 
+0

なぜPythonはこのように動作しますか?それがグローバルとして宣言されるまで、 'position'に何も割り当てられない' message = position'を意味します。 –

+0

@KalpeshDusaneあいまいさが生じるためです。 'position'が' global'でなければ、 'position = s_final'は新しいローカルの' position'変数を作成しようとしているのか、グローバルな 'position'変数に割り当てるのかを判断できません。 – DeepSpace

+0

もし 'global'を使わないと、' message = position'というこのステートメントの 'position'の値はゼロかどうか? –

1

あなたはグローバル変数にアクセスするためにglobalキーワードを使用する必要があります。

def build_message(signal): 
    global position 
    message = position 
0

あなたは次のように、多分あなたは、引数として渡す検討すべき機能に外部の変数を使用している場合:

def build_message(signal,position): 
    pass 
関連する問題