Питонический аргумент прохождения - PullRequest
2 голосов
/ 29 марта 2012

Какой из этих двух вызовов метода считается наиболее питоническим?

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 ]

2 голосов
/ 29 марта 2012

Если это просто статический вызов, вышеприведенный более Pythonic. Если вы хотите (и некоторые люди действительно делают это), вы можете выровнять это так:

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

Также обратите внимание, что ваш второй способ даже не работает - он только передает аргументы ключевых слов (в аргументы, которые могут даже не быть ключевыми словами).

0 голосов
/ 29 марта 2012

Все, что более читабельно.

Как только вы достигнете определенного уровня сложности для аргументов функции, может оказаться целесообразным определить класс, который инкапсулирует эти аргументы:

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)

Преимущество заключается в том, что вы можете изменить количество аргументов или подпись позже в одном месте с минимальным побочным эффектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...