4

Python でグローバル配列を定義する方法 tm と prs をグローバル配列として定義し、それらを 2 つの関数で使用したいのですが、どうすれば定義できますか?

import numpy as np 
import matplotlib.pyplot as plt

tm = []  
prs = []

def drw_prs_tm(msg):
    tm = np.append(tm,t)
    prs = np.append(prs,s)

def print_end(msg):
    plt.plot(tm,prs,'k-')
4

3 に答える 3

11

global <var_name>メソッドのようにそれらを参照する必要があります

def drw_prs_tm(msg):
    global tm
    global prs

    tm = np.append(tm,t)
    prs = np.append(prs,s)

def print_end(msg):
    global tm
    global prs
    plt.plot(tm,prs,'k-')

global ここここでもっと読む

global ステートメントは、現在のコード ブロック全体を保持する宣言です。これは、リストされた識別子がグローバルとして解釈されることを意味します。自由変数は、グローバルと宣言されていなくてもグローバルを参照できますが、グローバルなしでグローバル変数に代入することは不可能です。

Python では、関数内でのみ参照される変数は暗黙的にグローバルです。関数の本体内の任意の場所で変数に新しい値が割り当てられた場合、それはローカルであると見なされます。関数内で変数に新しい値が割り当てられた場合、変数は暗黙的にローカルであり、明示的に「グローバル」として宣言する必要があります。

于 2013-10-02T14:23:04.970 に答える
0

globalキーワードで:

def drw_prs_tm(msg):
    global tm, prs    # Make tm and prs global
    tm = np.append(tm,t)
    prs = np.append(prs,s)

また、そのままにしておけば、2 番目の関数でtmandprsをグローバルとして宣言する必要はありません。グローバル リストを変更しているため、最初の 1 つだけが必要です。

于 2013-10-02T14:23:35.213 に答える
0

他の関数内に関数がある場合は、これを使用します。

def ex8():
    ex8.var = 'foo'
    def inner():
        ex8.var = 'bar'
        print 'inside inner, ex8.var is ', ex8.var
    inner()
    print 'inside outer function, ex8.var is ', ex8.var
ex8()

inside inner, ex8.var is  bar
inside outer function, ex8.var is  bar

詳細: http://www.saltycrane.com/blog/2008/01/python-variable-scope-notes/

于 2016-09-16T19:44:55.937 に答える