#python
Проблема следующая, и думаю известная многим. При использовании в именах аргументов функций переменных с названиями, которые использовались во внешнем окружении IDE выводим соответствующее предупреждение - Shadow name "proxy" from outer scope. И правильно делает, так как это может привести к ошибкам(обсуждается вот тут) proxy = 'somepr.ox' def func(proxy): # do somethings return proxy Ни использовать решение которое вытекает из PEP8(синонимы или proxy_ ) мне не очень нравится так все равно иногда можно допустить ошибку, да и код выглядит убого(имхо): def func(proxy_, server_, user_): ... return proxy_ Один знакомый(Megabit, привет) дал совет который я использовал в C++ - в начале каждого аргумента ставится буква А(Аргумент), но в Python используется другой стиль и такой "финт" наверное испортит читабельность кода. int BrootSearch(byte* Abuff, int ALength) { int result = -1; } Прошу совет у людей кто работает в команде или много работал с чужим кодом и знает хороший метод именования аргументов которых удобен для чтения кода. Спасибо за внимание. Вариант описанный ниже, предлагаю не рассматривать: def func(proxy): return proxy def main(): proxy = 'somepr.ox' main()
Ответы
Ответ 1
Можно параметры функции спрятать за **, но мне это видится диким костылем: def func(**kwargs): return kwargs['proxy'], kwargs['name'] proxy = 'somepr.ox' if __name__ == '__main__': print(func(proxy='www.ru', name='abc')) PS. Можно, конечно, сократить название параметра до _, но это уже костыль для костыля: def func(**_): return _['proxy'], _['name']Ответ 2
Вот такой псевдокод от бизнес-консультанта )) if вы_работаете_в_команде : if ответ_отсутствует_в_задокументированных_внутренних_соглашениях_по_стилю_кода обсудите этот пункт в команде добавьте нужный пункт во внутренние соглашения поступайте по внутренним соглашениям else: используйте PEP8 (т.е. пишите: proxy_ ) Тогда другие вас поймут при чтении вашего кода. Если пишете только для себя и не планируете работать в команде - то какая разница.Ответ 3
То что вам по-советовали на мой взгляд ничем не отличается от нижнего подчёркивания: Aurl и url_. Я бы вам посоветовал перевести все входные параметры в словари или объекты со значением словарь или кортеж. Тогда бы у вас аргументы назывались текстом на входе и как переменная в функциях, ну и распаковка облегчит жизнь: my_args = {"x" : 10} def f(x): return x*2 print f(**my_args)
Комментариев нет:
Отправить комментарий