【问题标题】: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?

【问题讨论】:

    标签: python string variables


    【解决方案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)
          

          【讨论】:

            猜你喜欢
            • 2012-07-18
            • 2020-11-01
            • 2015-08-03
            • 1970-01-01
            • 2021-12-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多