【问题标题】:How to define a function with 100 arguments如何定义一个有 100 个参数的函数
【发布时间】:2015-01-29 10:47:29
【问题描述】:

我正在尝试在 Python 中定义一个函数。它应该是这样的:

def myfunction(Peter_1, Amy_1, Peter_2, Amy_2, Peter_3, Amy_3,....Peter_50,Amy_50):
    Peter_1 = 100
    Amy_1 = 20
    Peter_2 = 90
    Amy_2 = 4
    ...
    ...

我正在使用一个用 Python 编写的小软件进行优化。软件是这样的,我定义myfunction之后,我应该写,

parameter1 = Parameter("Peter_1", (90,100),1)
parameter2 = Parameter("Amy_1", (15,25),1)
...
...
parameter99 = Parameter("Peter_50", (70,100),1)
parameter100 = Parameter("Amy_50", (15,25),1)

Parameter 是软件定义函数,Parameter 的第一个参数应该是一个字符串,并且必须是我在myfunction 中定义的名称。然后软件知道第一个需要优化的参数是Peter_1。 我不想输入所有 100 个参数,有人可以帮我吗?

【问题讨论】:

  • “出于某种原因” - 什么原因?!您绝对应该将参数写为列表或元组,例如def myfunction(peters, amys)def myfunction(*people)。定义在函数内部立即重新分配的参数也没什么意义。
  • 为什么不把它们写成列表呢?它会给你同样的结果......除非你能以某种方式说服我们它不会。如果是因为您的参数不在调用上下文的列表中,您可以使用 *args 将它们打包在函数定义中,反之亦然。否则,您必须采取什么令人信服的论点?
  • 是的,输入100个参数真的很愚蠢,同意:)

标签: python arguments


【解决方案1】:

这是一种糟糕的代码气味。您应该将参数包装在一个对象中。例如字典。

类似这样的:

def myfunction(people):
    for person_name in people.iterkeys():
        people[person_name] = 100

my_people = {}
my_people['Peter'] = 0
my_people['Simon'] = 0

myfunction(my_people)
print my_people

但我真正关心的是你初始化函数中的值。为什么不提前?

my_people = {}
my_people['Peter'] = 100
my_people['Simon'] = 90

这样你就不需要这个函数了。

【讨论】:

    【解决方案2】:

    您甚至可以使用 python *args 语法。例如这样的:

    def foo(*args):
        for i in args:
            print(i)
    
    foo(1,2)
    foo(1,2,3,4,5,6,7,8)
    #output:
    1
    2
    #second run:
    1
    2
    3
    4
    5
    6
    7 
    8
    

    【讨论】:

      【解决方案3】:

      好吧,RvdK 的答案有效,但如果您必须按照您在问题中指出的方式编写它,那么您应该考虑使用 exec() 函数。这样,您可以在脚本中编写一个小代码,将此函数作为字符串编写给您。然后使用exec(),您实际上可以将生成的字符串用作代码的活动部分。

      不过,如果可能的话,我建议您使用列表或元组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-25
        • 1970-01-01
        • 2022-11-17
        • 1970-01-01
        • 2015-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多