Python: Это плохой стиль давать аргументу то же имя, что и функции? - PullRequest
3 голосов
/ 26 октября 2010

Рассмотрим следующий код:

def localize(value, localize=None):
    # do something with the localize argument

Переменная localize содержит информацию о том, следует ли соблюдать глобальную настройку локализации или нет. Он вызывается одним и тем же именем через три слоя кода. Что меньшее зло,

  • тень имени функции с именем аргумента или
  • использовать в этой функции другое имя, нежели во всей остальной части кода, несмотря на то, что они имеют абсолютно одинаковое значение?

Функция localize не использует рекурсию, поэтому невозможность вызова сама по себе не является проблемой.

/ edit: об изменении имени функции не может быть и речи, так как это общедоступный API. Единственная комната для маневра в имени аргумента.

Ответы [ 4 ]

11 голосов
/ 26 октября 2010

Я бы сказал, что это плохой стиль.Вместо изменения имени функции вы можете изменить имя параметра.Возможно, вы могли бы использовать имя как locale или localization?В любом случае существительное, вероятно, лучший выбор, чем глагол.

1 голос
/ 26 октября 2010

Да, это плохая форма, потому что это сбивает с толку (2 значения для одного слова).

Я бы переписал его как логическое, с True по умолчанию:

def localize(value, use_global_setting=True):
    ...
1 голос
/ 26 октября 2010

Ничто не противоречит этой практике в соответствии с PEP8 , но я бы посоветовал не использовать этот вид именования, хотя с технической точки зрения не было бы проблем с его использованием.

Если вы являетесь частью проекта, совместно сформулируйте соглашение об именах, которое не позволит вам запутаться в переменных и функциях с одинаковыми именами. PEP8 предлагает добавить вашу переменную с подчеркиванием в случае столкновения с зарезервированным словом, вы можете сделать то же самое в вашем случае.

1 голос
/ 26 октября 2010

Что вероятнее всего произойдет, вызывающий объект смущен необходимостью передать другой именованный аргумент, или кто-то позже реорганизует его с помощью рекурсии? Если вам нужно использовать рекурсию, вы всегда можете использовать взаимную рекурсию, чтобы уйти из области слежки.

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