2013-05-11 28 views
8

mainにグローバル変数、つまりmain関数から呼び出す関数で使用できる変数を定義したかったのです。メイン関数python内のグローバル変数

これは可能ですか?これを行うにはどうすればよいでしょうか?

ありがとうございます!

+1

は、あなただけの引数としてでその変数を渡すことができませんか? –

+0

はい、私は可能でしたが、主な関数の中でグローバル変数を定義することが可能かどうかを調べようとしていましたが、おそらくそれは悪い考えです... – Dnaiel

+0

グローバル変数はreallllllyyyy長いコードを取得すると迷惑になります。しかし、より小さいコードの場合は問題ありません。 – astronautlevel

答えて

2

内に変数が作成されました。メソッド(例:main)が定義上ローカルです。ただし、メソッドの外部にグローバル変数を作成し、その値を他のメソッドからアクセスして変更することができます。

この値を変更するには、globalというキーワードを使用します。

+0

私は内部の変数を定義しようとしています私がmainから呼び出す他の関数から使用できる主な関数です。たぶんあなたは正しいのですが、メインは単なる方法なので、実行できません。 – Dnaiel

+0

@Dnaielプログラムのさまざまな部分間で通信するためにパラメータを使用することができます。関数の中からグローバル変数を定義できる方法はわかりません。 – Levon

+0

ありがとうございます。 – Dnaiel

9

あなたがしたいことはできません。グローバル名前空間に変数を作成することができます。

myglobal = "UGHWTF" 

def main(): 
    global myglobal # prevents creation of a local variable called myglobal 
    myglobal = "yu0 = fail it" 
    anotherfunc() 

def anotherfunc(): 
    print myglobal 

Do not do this。

関数の全ポイントは、パラメータをとることです。関数にパラメータを追加するだけです。多くの機能を変更する必要があることがわかった場合、これをクラスに収集する必要があります。

*なぜこれが不可能であるかを詳しく説明してください。Pythonの変数は宣言されていません。代入文が実行されると作成されます。これは、(astronautlevelにより投稿されたコードから派生)次のコードが壊れることを意味します

def setcake(taste): 
    global cake 
    cake = taste 
def caketaste(): 
    print cake #Output is whatever taste was 

caketaste() 

Traceback (most recent call last): 
    File "prog.py", line 7, in <module> 
    caketaste() 
    File "prog.py", line 5, in caketaste 
    print cake #Output is whatever taste was 
NameError: global name 'cake' is not defined 

caketasteが呼び出されたとき、cakeへの割り当てが発生していないので、これが起こります。これは、setcakeが呼び出された後にのみ発生します。

あなたはここでエラーを見ることができます:http://ideone.com/HBRN4y

1

あなたがglobalステートメントを使用する必要があります。これらは比較的簡単です。これを行うには、変数自体を定義する前に変数をグローバルとして定義するだけです。たとえば :

def setcake(taste): 
    global cake 
    cake = taste 
def caketaste(): 
    print cake 
setcake('tasty') 
caketaste() #Output is tasty 

EDITは: 申し訳ありませんが、私があなたの質問を読み違えているようです。今私はそれを正しく答えるようにしてください。コードに見られるよう

def printcake(): 
    print cake #This function prints the taste of cake when called 
def setcake(taste, printq): 
    global cake #This makes sure that cake can be called in any function 
    cake = taste #sets cake's taste 
    if printq: #determines whether to print the taste 
     printcake() 
setcake('good', True) #Calls the function to set cake. Tells it to print result. The output is good 

出力、:http://ideone.com/dkAlEp

+1

'setcake'の前に' caketaste'を呼び出すとどうなりますか? – Marcin

関連する問題