Python 3:将函数参数解析为字符串

时间:2019-03-14 13:53:14

标签: python-3.x function

我有一个需要几个参数的函数。参数之一是指数据帧。现在,我想将此参数既用作数据框(我很容易就能做到)又用作字符串(我只是无法做到)。用字符串表示,我想将数据帧的名称用作字符串。

def get_avg_spectrum(full_signal, fs, skip_samples = 0,...):
    code...
    ...
    ...
return output

result = get_avg_spectrum(full_signal = acc_x_g, fs = 5000, skip_samples = 0,...)

在此,“ acc_x_g”是指熊猫系列。所以我要使用整个系列以及文本“ acc_x_g”。

# the below doesn't work

full_signal.name
Out[104]: 'ACC'

# ACC is the name of the variable in the Pandas Series "acc_x_g"

我有很多文章要运行此函数,因此,想法是简单地在函数中不断更改“ full_signal = xxx”参数。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

基于this answer(和一些测试),这听起来不可能(在您的示例中,链接的答案中的代码返回[“ full_spectrum”]作为名称,而不是所需的[“ acc_x_g” ])。

但是,一种可能性是传递带有名称而不是对象的字符串。我不确定您的代码的确切设置方式,但是类似的方法会起作用。

def get_avg_spectrum(full_signal, fs, skip_samples = 0,...):
    name = full_signal
    df = eval(full_signal)
    ...
    return(output)

result = get_avg_spectrum(full_signal = "acc_x_g", fs = 5000, skip_samples = 0,...)

编辑:如有必要,您可能可以将这两者结合起来(链接的答案以及我在上面发布的内容)。同样,这取决于对象的创建方式等。但是,创建一些对象,将其循环以获取其名称,然后将名称传递给函数...这很麻烦,但是可以使用。

答案 1 :(得分:0)

鉴于其他回应的评论,还有另一种方式。

创建一个字典,其中键是名称,而对象是值(可以根据链接使用inspect自动执行)。然后匹配value == test_value

显而易见的选择是将键简单地传递给函数,然后让函数调用字典:

mydict = {"acc_x_g": acc_x_g}

def get_avg_spectrum(full_signal, fs, skip_samples = 0,...):
    df = mydict[full_signal]
    ...
    return(output)

result = get_avg_spectrum(full_signal = "acc_x_g", fs = 5000, skip_samples = 0,...)

但是根据您的代码,您可能需要按照先前/自动确定的特定顺序遍历光谱。如果是这种情况(顺序很重要),并且您无法生成该顺序的列表,我将保留以下解决方案。但是要小心!假设您的所有pd.Series都是唯一

mydict = {"acc_x_g": acc_x_g}

def get_avg_spectrum(full_signal, fs, skip_samples = 0,...):
    name = ""
    for k,v in mydict.items():
        if v.all() == full_signal.all():
            name = k

    ...
    return(output)

result = get_avg_spectrum(full_signal = acc_x_g, fs = 5000, skip_samples = 0,...)