Python:我可以在另一个函数的* args列表中调用一个函数吗?

时间:2018-11-22 09:58:00

标签: python matplotlib

我见过与此类似的问题,但不完全相同,所以我在这里试一下。

我有一个图,希望将用户输入曲线(或任何函数)绘制到该图上。我目前有:

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

1 个答案:

答案 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])

输出:

enter image description here

如果要使用可选参数,可以执行以下操作:

def plotter(f_list=None):

    ...

    if f_list:
         for f in f_list:
             ...