Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中使用getattr调用函数?_Python_Matplotlib_Typeerror_Axis_Getattribute - Fatal编程技术网

如何在python中使用getattr调用函数?

如何在python中使用getattr调用函数?,python,matplotlib,typeerror,axis,getattribute,Python,Matplotlib,Typeerror,Axis,Getattribute,我正在努力实现这一点: 对于matplotlib,但出现了一些问题 import matplotlib.pyplot as plt if condition1: q='plot' elif condition2: q='logy' elif condition3 q='loglog' m = globals()['plt']() TypeError: 'module' object is not callable plot_function = getattr(m,

我正在努力实现这一点: 对于matplotlib,但出现了一些问题

import matplotlib.pyplot as plt

if condition1:
    q='plot'
elif condition2:
    q='logy'
elif condition3
    q='loglog'

m = globals()['plt']()
TypeError: 'module' object is not callable

plot_function = getattr(m, q) #it doens't make it to this line
我希望它能做到这一点:

if condition1:
    plt.plot(...)
elif condition2:
    plt.logy(...)
elif condition3:
    plt.loglog(...)
有人知道我做错了什么吗

编辑:对不起,我的代码顺序不对。现在修好了

编辑2:

这是它最初来自的代码:

def plot(self):
    assert self.plotgraph == True
    plt.figure(1)
    plt.rcParams.update({'font.size': 40})
    plt.figure(figsize=(150, 70))
    plt.suptitle('alpha = '+str("{0:.2f}".format(self.alpha)))


    j=len(self.seeds)
    for k in range(9*j):
        plt.subplot(3,3*j,k+1)
        g=k%(3*j)
        if k<3*j:
            q='plot'
        elif 3*j<=k<6*j:
            q='logy'
        elif 6*j<=k:
            q='loglog'
        m = globals()['plt']()
        plot_function = getattr(m, q)
        if g<2*j:
            for i in range(j):
                if (2*i)<=g%j*2<(2*(i+1)):
                    seed_type=' seed: '+ str(i+1)
                    seed=(i+1)
        else:
            for i in range(j):
                if g%j == i:
                    seed_type=' seed: '+ str(i+1)
                    seed=(i+1)

        if g<2*j:
            if g%2==0:
                set_type=' train-set'
                plot_function(np.array(self.index),np.array(self.plotlist[seed*2+0]))
            else:
                set_type=' test-set'
                plot_function(np.array(self.index),np.array(self.plotlist[seed*2+1]))
        else:
            set_type=' train-test dist'
            plot_function(np.array(self.index),np.array(self.plotlist[seed*2+0]-np.array(self.plotlist[seed*2+1])))

        plt.grid(True)
        plt.title(q+set_type+seed_type)
    plt.tight_layout()
    plt.savefig("plot1() " +str(self.nodes[1])+' hidden nodes, alpha='+ str("{0:.2f}".format(self.alpha)) + '.png')
    plt.clf()
    plt.close()
def绘图(自):
assert self.plotgraph==True
plt.图(1)
plt.rcParams.update({'font.size':40})
plt.图(figsize=(150,70))
plt.suptitle('alpha='+str({0.2f}).format(self.alpha)))
j=len(自种子)
对于范围(9*j)内的k:
plt.子地块(3,3*j,k+1)
g=k%(3*j)
如果k
m=globals()
plt
是一个模块,因此不可调用。我想你想要:

m = globals()['plt']
plot_function = getattr(m, q)
plot_function()  # call this one!
话虽如此。。。这种设计似乎不必要地复杂。为什么不:

if condition1:
    plt.plot()
elif condition2:
    plt.logy()
elif condition3:
    ...
m=globals()
plt
是一个模块,因此不可调用。我想你想要:

m = globals()['plt']
plot_function = getattr(m, q)
plot_function()  # call this one!
话虽如此。。。这种设计似乎不必要地复杂。为什么不:

if condition1:
    plt.plot()
elif condition2:
    plt.logy()
elif condition3:
    ...

当我试图定义m时,它抛出错误。这是更大循环的一部分。我将更新我的原始帖子。当我试图定义m时,它会抛出错误。这是更大循环的一部分。我会更新我的原创帖子。