Pythonic论证传递

时间:2012-03-29 07:37:47

标签: python methods arguments

这两个方法调用中哪一个被认为是最pythonic?

some_method(that_has, very_many, aurguments=None, of_different=None, 
            kinds=u'', and_importance=None, spanning=u'multple lines'):

method_args = {
   u'first_arg' : that_has,
   u'second_arg' : very_many,
   u'arguments' : None,
   u'of_different' : None,
   u'kinds' : u'',
   u'and_importance' : None,
   u'spanning' : u'multiple lines'
}
some_method(**method_args)

我个人更喜欢第二个,当第一个跨越超过2行时,第一种方式,如果它适合一行,对于两行,我不太确定。

编辑:传递的参数可能不像我的例子那样简短和静态,更可能是很长的名字。

2 个答案:

答案 0 :(得分:2)

如果它只是一个静态调用,那么上面就是Pythonic。如果你想(有些人实际上这样做)你可以像这样对齐:

some_method(
    that_has,
    very_many,
    arguments=None,
    of_different=None, 
    kinds=u'',
    and_importance=None,
    spanning=u'multple lines'
)

另请注意,您的第二种方式甚至不起作用 - 它只传递关键字参数(对于甚至可能不是关键字的参数)。

答案 1 :(得分:0)

无论什么更具可读性。

一旦你为函数的参数达到一定程度的复杂性,实际定义一个封装这些参数的类是值得的:

args = SomeMethodArgs() # custom args class for the some_method func

args.x = 2
args.y = "a string"
args.z = None
args.items = [a, b, c]

some_method(args)

这样做的好处是,您可以在一个地方稍后修改参数数量或签名,且附带效果最小。