我见过与此类似的问题,但不完全相同,所以我在这里试一下。
我有一个图,希望将用户输入曲线(或任何函数)绘制到该图上。我目前有:
location ~ \.(ttf|ttc|otf|eot|woff|font.css|css|js|gif|png|jpe?g|svg|svgz|ico|webp)$ {
add_header Access-Control-Allow-Origin "*";
}
但是,我收到了一个错误,即可迭代项不可调用。问题在于输入(t)的范围必须在函数本身内定义,所以我不能做类似的事情:
if args:
for arg in args:
ax.plot( t, arg, color = 'r' )
因为在调用该函数之前,它不知道什么是“ t”。也许我的语法是错误的。老实说,我仍然没有完全理解* args和** kwargs,但是我不知道我是否缺乏这种理解是这里的问题。最好我愿意做这样的事情:
plotter( array, *[vonmises.pdf(t, 1), norm.pdf(t), some_other_curve(t)] )
,然后在进行绘图时,明确说明输入范围。 ?我的功能的完整代码如下:
plotter( array, *[vonmises.pdf, norm.pdf] )
答案 0 :(得分:0)
您无需进入*args
和**kwargs
即可实现所需的目标。您可以简单地传递一个函数列表:
import matplotlib.pyplot as plt
import numpy as np
def f1(x):
return x
def f2(x):
return x**2
def f3(x):
return x**(1/2)
def plotter(f_list):
x = np.linspace(0., 1.)
plt.figure()
for f in f_list:
plt.plot(x, f(x))
plotter([f1, f2, f3])
输出:
如果要使用可选参数,可以执行以下操作:
def plotter(f_list=None):
...
if f_list:
for f in f_list:
...