#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)
Комментариев нет:
Отправить комментарий