【问题标题】:refer to specific parameter by object in array?按数组中的对象引用特定参数?
【发布时间】:2014-02-10 23:25:23
【问题描述】:

所以我真的不知道如何表达这个问题,或者我确定我可以谷歌它。

我有一个函数如:

def example(parameter1 = "", parameter2 = "", parameter3 =""):
    print(parameter1)
    print(parameter2)
    print(parameter3)

而且我希望能够调用它 3 次,一次只传入一个参数,例如:

example(parameter1 = "Hello")
example(parameter2 = "Stack")
example(parameter3 = "Overflow")

但在我的真实代码中,我需要大量概括这一点并拥有更多参数,所以我希望能够按照以下方式做一些事情:

paramnames = ['parameter1', 'parameter2', 'parameter3']
parameters = ['Hello', 'Stack', 'Overflow']

for i in range(3):
    example(paramnames[i] = parameters[i])

在python中有没有办法做到这一点?

【问题讨论】:

    标签: python parameters expression keyword generalization


    【解决方案1】:

    您要查找的内容称为argument packing,并使用*** 表示位置和命名参数:

    paramnames = ['parameter1', 'parameter2', 'parameter3']
    parameters = ['Hello', 'Stack', 'Overflow']
    
    for name, value in zip(paramnames, parameters):
        example(**{name: value})
    
    def example(parameter1="", parameter2="", parameter3=""):
        print(parameter1)
        print(parameter2)
        print(parameter3)
    

    请记住,如果未传递参数,它将是默认值。所以输出是:

    Hello
    
    
    
    Stack
    
    
    
    Overflow
    

    【讨论】:

    • 这是完美的。谢谢。
    【解决方案2】:

    使用dict** 表示法:

    parameters = {'parameter1': 'Hello',
                  'parameter2': 'Stack', 
                  'parameter3': 'Overflow'}
    
    for k, v in parameters.items():
        example(**{k: v})
    

    如果您需要保留订单,请使用OrderedDict

    【讨论】:

      【解决方案3】:

      为什么不使用这样的字典:

      paramnames = ['parameter1', 'parameter2', 'parameter3']
      parameters = ['Hello', 'Stack', 'Overflow']
      
      for i in range(3):
          example({paramnames[i] : parameters[i]})
      

      和:

      def example(para_dict):
          for k,v in para_dict.items():
              print(v)
      

      如果你想在不同的代码上使用每个参数,你可以在“k”上测试

      【讨论】:

        【解决方案4】:

        有几种方法可以做到这一点。

        最直接的方法可能是在使用example(**param_dict) 将参数全部传递给函数之前使用字典来保存参数。

        更“花哨”的方法是将functools.partial 用于预先指定一些参数的可调用对象。您可以执行类似example = partial(example, parameter1="hello") 的操作来添加参数,然后在最后调用example()。如果参数来自许多不同的地方,并且您需要将函数及其参数保留一段时间,这种方法可能很有用,例如在回调中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-04
          • 2011-09-25
          • 1970-01-01
          • 1970-01-01
          • 2019-09-24
          • 1970-01-01
          • 1970-01-01
          • 2021-08-05
          相关资源
          最近更新 更多