1

私のコード:

def A():
    a = 'A'

    print a

    return

def B():

    print a + ' in B'

    return

B() がインターピーターに入力されると、

Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "<module1>", line 9, in B
NameError: global name 'a' is not defined

a を定義するにはどうすればよいですか? B() がインタープリターに入力されたときに、最終結果が「A in B」になるようにしたい

編集:可能であれば、 a の定義を A() 内に保持したいと思います。

4

6 に答える 6

3
def A():
    global a
    a = 'A'
    print a

def B():
    global a
    print a + ' in B'

A()
B()

これは次のように表示されます:

A
A in B

ところで:関数の最後に単純な「リターン」は必要ありません。

于 2010-08-29T17:05:02.610 に答える
2

私はPythonにかなり慣れていないので、次のことを一粒の塩で取りたいと思うかもしれませんが、変数 a と関数 A() および B() をクラスのメンバーとして持つことを検討しましたか?

class myClass(object):

    def __init__(self):
        self.a = ''

    def A(self):
        self.a = 'A'
        print self.a

    def B(self):
        print self.a + ' in B'


def main():
    stuff = myClass()
    stuff.A()
    stuff.B()

if __name__ == '__main__':
    main()

上記のコードをファイルに保存して実行すると、期待どおりに動作するようです。

于 2010-08-29T17:54:53.273 に答える
0
a = 'A'    
def B():    
    print a + ' in B'
于 2010-08-29T17:05:05.327 に答える
0

globalこれを行うには、次のキーワードを使用します。

def A():
    global a
    a = 'A'

def B():
    global a
    # ...

しかし、グローバル変数を使用することは、一般的には悪い考えです。あなたがやりたいことを行うためのより良い方法はありませんか?

于 2010-08-29T17:05:22.907 に答える
0

この SO questionからの私の答えをチェックしてください。基本的:

グローバルデータのみを含む新しいモジュールを作成します (あなたの場合は としましょうmyGlobals.py):

# create an instance of some data you want to share across modules
a=0

そして、このデータにアクセスしたい各ファイルは、次の方法でアクセスできます。

import myGlobals

myGlobals.a = 'something'

だからあなたの場合:

import myGlobals

def A():
    myGlobals.a = 'A'
    print myGlobals.a

def B():
    print myGlobals.a + ' in B'
于 2010-08-29T17:07:46.037 に答える