2016-11-03 22 views
1

私は素朴な問題を抱えていますが、変数がグローバルであればコードを使っていくつかの変数を使いたいのですが、それは問題ありません。しかし、私は関数を使用したいので、私は将来の仕事でいくつかのパラメータを渡すことができます。 a_variable以来Python関数でグローバル名を設定する方法は?

たとえば、このコードがエラーと間違っている、

def fun1(): 
    print a_variable 

def fun2(a_variable='hello, world'): 
    fun1() 

fun2('hello, world') 

エラー、

--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
<ipython-input-42-31e8e239671e> in <module>() 
     5 fun1() 
     6 
----> 7 fun2('hello, world') 

<ipython-input-42-31e8e239671e> in fun2(a_variable) 
     3 
     4 def fun2(a_variable='hello, world'): 
----> 5 fun1() 
     6 
     7 fun2('hello, world') 

<ipython-input-42-31e8e239671e> in fun1() 
     1 def fun1(): 
----> 2 print a_variable 
     3 
     4 def fun2(a_variable='hello, world'): 
     5 fun1() 

NameError: global name 'a_variable' is not defined 

はどのようfun1がそれを使用することはできません、fun2に有効なのですか?どうすれば改善できますか? fun1(a_variable)

答えて

1

のようなパラメータを渡す必要はありません。変数をグローバルにする簡単なステートメントがあります。しかし、まず、パラメータリストの変数名をfun2()に変更する必要があります。 'a_variable' is local and global:あなたは別のエラーを取得し、パラメータ・リストを変更しない場合

def fun2(a='hello, world'): 
    global a_variable # declaration 
    a_variable = a # definition 
    fun1() 

:この変更の後、あなたはglobal -statementを挿入することができます。

+0

こんにちは、ありがとう。これは機能します。しかし、私は本当にこれが好きではありません。これはグローバル変数を持ちますが、実際には 'a_variable'は "fun2"の名前空間で "グローバル"にする必要があります。 – insomnia

+0

多分、関数の外側で(しかし最初の関数呼び出しの前に) 'global a_variable'行を置くべきでしょう。そして変数globalを作るために 'fun2'を呼び出す必要はありません。 – Aemyl

+0

この場合、関数外の 'global a_variable'は何も行いません。 'fun2'関数の中で変数がローカルとして解釈されるので、おそらくはうまくいきません。あなたが明示的にインタプリタにグローバル変数を参照するよう指示しない限りです。言い換えれば、おそらく 'fun2()'の中に 'global a_variable'ステートメントが必要です。 – Aemyl

関連する問題