如何在 python 中使用 getattr 调用函数?
How to call functions with getattr in python?
我正在尝试实现这个:
对于 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()
m = globals()['plt']()
与 plt()
相同。 plt
是一个模块,因此不可调用。我想你想要:
m = globals()['plt']
plot_function = getattr(m, q)
plot_function() # call this one!
话虽如此...这种设计似乎不必要地复杂。为什么不呢:
if condition1:
plt.plot()
elif condition2:
plt.logy()
elif condition3:
...
我正在尝试实现这个: 对于 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()
m = globals()['plt']()
与 plt()
相同。 plt
是一个模块,因此不可调用。我想你想要:
m = globals()['plt']
plot_function = getattr(m, q)
plot_function() # call this one!
话虽如此...这种设计似乎不必要地复杂。为什么不呢:
if condition1:
plt.plot()
elif condition2:
plt.logy()
elif condition3:
...