这两个方法调用中哪一个被认为是最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行时,第一种方式,如果它适合一行,对于两行,我不太确定。
编辑:传递的参数可能不像我的例子那样简短和静态,更可能是很长的名字。
答案 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)
这样做的好处是,您可以在一个地方稍后修改参数数量或签名,且附带效果最小。