使用变量作为函数名和字符串[重复]

Posted

技术标签:

【中文标题】使用变量作为函数名和字符串[重复]【英文标题】:Use variable as functionname and string [duplicate] 【发布时间】:2020-06-15 05:22:47 【问题描述】:

我有以下代码

import pandas as pd
df = pd.DataFrame(columns=['var1', 'var2','var3'])
df.loc[0] = [0,1,2]

def RS():
    x = 123
    y = 456
    z = 'And some more random shit'
    return x+y

def BS():
    x = -890
    y = (456*1)+90
    z = 'And some more random shit'
    return x-y

def MyCompute(srt, srt_string):
    df[srt_string] = srt()
    df['1min' + srt_string] = 1-df[srt_string]

MyCompute(srt=RS, srt_string='RS')
MyCompute(srt=BS, srt_string='BS')

有没有办法避免调用MyCompute函数时出现双RS和双BS?

【问题讨论】:

【参考方案1】:

使用属性__name__

def MyCompute(srt):
    df[srt.__name__] = srt()
    df['1min' + srt.__name__] = 1 - df[srt.__name__]

MyCompute(srt=RS)
MyCompute(srt=BS)

【讨论】:

【参考方案2】:

把你的函数放在字典里,然后你就可以按名字查找函数了。

compute_dict = "RS": RS, "BS": BS
def MyCompute(srt_string):
    srt = compute_dict[srt_string]
    df[srt_string] = srt()
    df['1min' + srt_string] = 1-df[srt_string]

【讨论】:

【参考方案3】:

是的,您可以使用函数的__name__ 属性,例如RS.__name__ 而不是 'RS'

【讨论】:

【参考方案4】:

是的,你可以得到函数的名字:

def MyCompute(srt):
    df[srt.__name__] = srt()
    df['1min' + srt.__name__] = 1-df[srt.__name__]

MyCompute(srt=RS)
MyCompute(srt=BS)

【讨论】:

以上是关于使用变量作为函数名和字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript对象:按名称作为字符串访问变量属性[重复]

JS中变量名和函数名重名

php if else条件在变量中作为字符串[重复]

如何使用for循环将文本文件中的一行字符串作为Bash中另一个脚本的单独变量传递[重复]

如何使用字符串作为整数的名称? C++ [重复]

Swift - 1 (常量变量字符串数组字典元组循环枚举函数)