有没有一种方法可以将相同的值传递给函数的所有参数?

3

我在想是否有一种方法可以在不知道函数参数的情况下将一个值传递给函数的所有参数?

例如:

def SomeFunction(arg1, arg2, arg3):
    print(arg1)
    print(arg2)
    print(arg3)

SomeFunction("Hi"**)

>> Hi
>> Hi
>> Hi

在这种情况下,** 只是占位符语法。
1个回答

5
我不会让这通过代码审查,但出于好玩,为什么不试试呢?
import inspect
SomeFunction(*["Hi"] * len(inspect.signature(SomeFunction).parameters))

它是如何工作的?让我们分解一下。
您可以使用func(*l)将列表解包为单独的参数,如下所示:
>>> SomeFunction(*['Hi', 'Hi', 'Hi'])
Hi
Hi
Hi

将列表乘以一个数字会使该列表重复那么多次。
>>> ["Hi"] * 3
['Hi', 'Hi', 'Hi']
>>> SomeFunction(*['Hi'] * 3)
Hi
Hi
Hi

代替硬编码数字3,我们如何获取参数的数量?答案是:inspect 模块。
>>> inspect.signature(SomeFunction)
<Signature (arg1, arg2, arg3)>
>>> inspect.signature(SomeFunction).parameters
mappingproxy(OrderedDict([('arg1', <Parameter "arg1">), ('arg2', <Parameter "arg2">), ('arg3', <Parameter "arg3">)]))
>>> len(inspect.signature(SomeFunction).parameters)
3

将它们放在一起:

>>> ["Hi"] * len(inspect.signature(SomeFunction).parameters)
['Hi', 'Hi', 'Hi']
>>> SomeFunction(*["Hi"] * len(inspect.signature(SomeFunction).parameters))
Hi
Hi
Hi

这很荒谬,在关键字参数、*args或**kwargs的情况下,无法正确失败。 -1 - wim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接