【问题标题】:Python - dynamically calling a method with a dynamic number of arguments. Reflection?Python - 动态调用具有动态参数数量的方法。反射?
【发布时间】:2016-02-07 03:21:53
【问题描述】:

假设我想解析一个包含行的文本文件:

sampleMethod 
sampleParameter
sampleParameter2

其中 sampleMethod 是一个方法字符串,而 sample 参数可以是任何类型的值。

我知道如果我们知道模块和方法名称,我可以使用 getattr 动态调用某些东西:

output = getattr(componentName, sampleMethod)(sampleParameter)

但是如果我们动态发现多个参数,我该怎么做呢?

例如,如果文本文件有:

sampleMethod 
sampleParameter
sampleParameter2
sampleParameter3

我们如何动态地做这样的事情?

  output = getattr(componentName, sampleMethod)(sampleParameter, sampleParameter2, sampleParameter3)

【问题讨论】:

    标签: python function dynamic reflection


    【解决方案1】:

    你可以unpack你的参数列表(特殊的*):

    # you could dynamically build the list 
    parameterList = [sampleParameter, sampleParameter2, sampleParameter3]
    
    # then pass as parameter
    output = getattr(componentName, sampleMethod)(*parameterList)
    

    请注意,如果您确定parameterList 不会大于sampleMethod 的参数数量,则不必使用arbitrary argument lists(否则会出现运行时错误)。

    如果您不确定,您仍然可以先对列表进行切片或使用任意参数列表。

    【讨论】:

      【解决方案2】:

      您可以在函数定义的属性中使用 *。它将所有不匹配的参数处理成一个元组。例如:

      def print_for(*args):
          print args
      
      print_for(1,2,3)
      print_for(1,2,3,4)
      

      【讨论】:

        猜你喜欢
        • 2015-05-31
        • 2013-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-18
        • 1970-01-01
        相关资源
        最近更新 更多