2012-04-02 2 views
2

私はPythonでコーディングしています....関数Python内のグローバル配列の値をリセット

私は簡単な質問があります。私は特定の関数を呼び出すことによってグローバル配列の値をリセットしようとしていますが、難しさがあります。ここに私のコードは、現時点では次のとおりです。

CHOICES = (('1', 'First'), ('2', 'Second')) 

def set_choices(): 
    global CHOICES 
    CHOICES = (('3', 'Third'), ('4', 'Fourth')) 

基本的に私が何をしたいのかは、いくつかの他の関数から関数を呼び出すことで、配列の選択をリセットしています。それを行う方法はありますか?

ありがとうございます!

+0

あなたはすでに書いたものとどのように違うのですか?私は何かが欠けていると感じている。 – Cameron

+0

プログラムで実際にあなたの関数 'set_choices()'を呼び出しましたか?または、他に情報がありませんか?そして、あなたの選択はリストまたはセットであるはずですか? – George

+0

元のプログラムでset_choices()を呼び出しました。はい、それはセットになるはずです。 私がやっていることは、1つの関数でset_choices()を呼び出すことです。次に別のファイルで、配列CHOICESをインポートしています。最初の関数でset_choicesを呼び出し、次に配列をインポートすると、実際には変更は反映されません。 –

答えて

3
myObject = [('1', 'First'), ('2', 'Second')] 
CHOICES = set(myObject) 

def set_choices(): 
    global CHOICES 
    CHOICES.clear() # Remove the element from set CHOICES 
    # Do some of your changes here 
    anotherObject = [('3', 'Third'), ('4', 'Fourth')] 
    CHOICES[:] = set(anotherObject) 


print(CHOICES) # Before calling set_choices 
set_choices() 
print(CHOICES) # After you calling set_choices 

これはうまくいくと思います。しかし、私はsetとtupleを使うのが良いアイデアなのかどうか分からないので、私は個人的にあなたの代わりにリストのリストを使うことを勧めます。他のオプションの代わりにセットを使用する特別な理由はありますか?

出力:

CHOICES = [['1', 'First'], ['2', 'Second']] 

def set_choices(): 
    # Changed since the comment of another member aaronasterling 
    # Removed the use of global 
    CHOICES[:] = [['3', 'Third'], ['4', 'Fourth']] 

print(CHOICES) 
set_choices() 
print(CHOICES) 

出力:

[['1', 'First'], ['2', 'Second']] 
[['3', 'Third'], ['4', 'Fourth']] 

このSO question & answerをチェックアウトし、スライスの割り当ての詳細については、リストを使用するには、あなたのコメントへ

{('2', 'Second'), ('1', 'First')} 
{('4', 'Fourth'), ('3', 'Third')} 

応答します。

+0

私はリストを意味すると思います。しかし、私は配列としても試してみましたが、どちらもうまくいきませんでした:/ –

+0

ありがとうございます! –

+0

あなたは大歓迎です! – George

1

リストでこれを行うには、globalというキーワードは必要ありません。

CHOICES = [('1', 'First'), ('2', 'Second') 

def set_choices(): 
    CHOICES[:] = (('3', 'Third'), ('4', 'Fourth')) 

これは、参照を変更せずにリストの内容を置き換えます。スライスの割り当てによって機能します。 CHOICES[:]は、リスト全体のスライスを参照します。

関連する問題