使用变量作为函数名和字符串[重复]
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对象:按名称作为字符串访问变量属性[重复]