4

如何在python中定义全局数组我想将tm和prs定义为全局数组,并在两个函数中使用它们,我该如何定义它们?

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 在此处此处阅读更多信息

全局语句是适用于整个当前代码块的声明。这意味着列出的标识符将被解释为全局变量。没有全局变量就不可能分配给全局变量,尽管自由变量可以引用全局变量而不被声明为全局变量。

在 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)

此外,如果您保持当前状态,则无需在第二个函数中将tmand声明为全局。prs只有第一个需要它,因为它正在修改全局列表。

于 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 回答