2016-04-14 5 views
0

グローバル変数が呼び出されるたびに、作成されたときだけでなく、グローバル変数を読み込む関数作成者を作成したいと思います。 Pythonは私のvarリファレンスを現在の値に置き換えるので、そうではありません。Python:関数作成者の中でグローバル変数を読み取る

import operator 

space = [] 
pp = 0 #this is a global var 

def op(op,*tval,over = 0, doSave = True): 
    def operation(): 
     val = list(tval) 
     val.append(space[pp]) # This apparently becomes val.append(space[0]) 
     temp = op(*val) 
     if doSave: 
       space[pp] = temp # This apparently becomes space[0] = temp 
    return operation 

increase = op(operator.add, 1, doSave = True) 

増加が空間のみで動作します[0]と私はPPを変更しても、それが唯一の宇宙の最初の値を変更します。

+0

ここでppを変更しますか?また、return文も関数内にはありません。 – Selcuk

+0

ここにコードをコピーすると、インデントが変わりました。ちょうどそれを固定した。 (私は将来、ppを変更したいと考えています。例えば、 "pp = 5; increase()") – SudoAptGetBeard

答えて

0
return operation 

は字下げする必要があります。

あなたは

global space 

spaceを変更する必要があります。

0

あなたが達成しようとしていることを正しく理解しているとすれば、ppをグローバルにする必要があります。ちょうどglobal ppdef op(..)の直後に追加してください。

演算子の作成にクロージャを使用しているため、Pythonはグローバル変数にエイリアスを代入する代わりに、現在の値pp(つまり0)をバインドします。 ppをグローバル変数として宣言すると、代わりにエイリアスがバインドされます(Pythonはそれを変更できることを理解しています)。

また、機能の名前をopからmake_operator(op, *args, doSave=True)に変更することも、改善点となります。機能は変更されませんが、読みやすさが向上します。

+0

私はそれを試みます。アドバイスをいただきありがとうございます。 – SudoAptGetBeard

関連する問題