There should be no spaces before or after the =
in a function definition.
Anti-pattern
def func(key1 = 'val1',
key2 = 'val2'):
return key1, key2
Best practice
def func(key1='val1',
key2='val2'):
return key1, key2
Additional links
- https://www.python.org/dev/peps/pep-0008/#other-recommendations
I’m a Python beginner, I read pep standards which must follow while programming in python
http://legacy.python.org/dev/peps/pep-0008
Now I have a doubt. As they have mentioned that you should not put spaces around the equal sign while using keyword argument or a default parameter value in functions or Dict.
For example
YES
def myfunc(key1=val1, key2=val2, key3=val3)
NO
def myfunc(key1 = val1, key2 = val2, key3 = val3)
Thats fine but what if I break down these in multiple lines. something like this(when we have many parameters or long name)
def myfunc(key1=val1,
key2=val2,
key3=val3)
In this case, I think, we should put space around the equal sign. am I correct. because these all are about readability but I’m just curious if there is standard for this too. Looking for best practices.
Same thing for Dict.
new_dict= Dict(
key1=val1,
key2=val2,
key3=val3
)
And should I put a comma after last argument in dict unlike example mentioned above, I didn’t put a comma after last value (key3=val3)
asked Jul 17, 2014 at 18:18
user3810188user3810188
3011 gold badge3 silver badges14 bronze badges
2
Thats fine but what if I break down these in multiple lines. something like this(when we have many parameters or long name)
def myfunc(key1=val1, key2=val2, key3=val3)
In the code you give, you are not putting whitespace around the =
, so you are complying with pep8 in respect of operator spacing (your indentation does not comply with pep8).
In general, you can write your code however you like. If you don’t comply with pep8, other people generally won’t find your code as easy to read. If you have local standards within your company, that should supercede pep8. If you don’t have standards that direct you to violate pep8, your colleagues will likely hate you for breaking pep8.
If you don’t have a standard at all, future you will also hate present you.
answered Jul 17, 2014 at 18:23
MarcinMarcin
48.2k18 gold badges127 silver badges200 bronze badges
PEP8 clearly says:
Don’t use spaces around the = sign when used to indicate a keyword
argument or a default parameter value.
You don’t need to put white spaces around the equal sign in both cases.
If you are not sure whether your code follows PEP8 standard or not, use flake8
static code analysis tool. It would raise warnings in case of code style violations.
Example:
Consider you have extra whitespaces around the equal signs:
def myfunc(key1 = 'val1',
key2 = 'val2',
key3 = 'val3'):
return key1, key2, key3
flake8
outputs a warning for every unexpected whitespace:
$ flake8 test.py
test.py:3:16: E251 unexpected spaces around keyword / parameter equals
test.py:3:18: E251 unexpected spaces around keyword / parameter equals
test.py:4:16: E251 unexpected spaces around keyword / parameter equals
test.py:4:18: E251 unexpected spaces around keyword / parameter equals
test.py:5:16: E251 unexpected spaces around keyword / parameter equals
test.py:5:18: E251 unexpected spaces around keyword / parameter equals
answered Jul 17, 2014 at 18:26
alecxealecxe
460k120 gold badges1076 silver badges1186 bronze badges
7
No. Don’t put spaces around equal signs when declaring kwargs. Think of it this way: If you are just skimming lines of code, you want to train your eyes to see the difference between the assignment operator used during ordinary program flow (spam = True) and a kwarg, especially if it’s on its own line (spam=True).
As for a trailing comma, I have always felt that a trailing comma suggests to a fellow team member or reader that I feel the list, dict, set of args, etc. might be subject to expansion in the future. If I’m fairly certain that the structure represents its mature state, I remove it.
answered Jul 17, 2014 at 18:23
jMylesjMyles
11.7k6 gold badges42 silver badges56 bronze badges
1
Permalink
Cannot retrieve contributors at this time
code | message | title | links |
---|---|---|---|
E251 |
Unexpected spaces around keyword / parameter equals |
Unexpected spaces around keyword / parameter equals (E251) |
https://www.python.org/dev/peps/pep-0008/#other-recommendations |
There should be no spaces before or after the =
in a function definition.
Anti-pattern
def func(key1 = 'val1', key2 = 'val2'): return key1, key2
Best practice
def func(key1='val1', key2='val2'): return key1, key2
palachevskiy 0 / 0 / 0 Регистрация: 15.05.2020 Сообщений: 9 |
||||
1 |
||||
15.05.2020, 16:57. Показов 8108. Ответов 4 Метки нет (Все метки)
./solution.py:3:12: E203 whitespace before ‘:’
0 |
5407 / 3831 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
15.05.2020, 17:05 |
2 |
отфармотировать по стандарту PEP8 Может, сначала сдашь русский? И еще: ты видел, что люди выкладывают сюда код в тегах Python кода, а не тупой нечитабельной лапшой?
1 |
Просто Лис 5249 / 3270 / 1009 Регистрация: 17.05.2012 Сообщений: 9,605 Записей в блоге: 9 |
|
15.05.2020, 17:28 |
3 |
PyCharm -> ctrl+L
0 |
unfindable_404 691 / 474 / 204 Регистрация: 22.03.2020 Сообщений: 1,052 |
||||
15.05.2020, 17:54 |
4 |
|||
Дело не в PEP8. Код, который вы запускаете, поддерживается только Python3.8. Но вы запускаете его на Python более старой версии. Отсюда и ошибки. Я поправил.
2 |
Am I evil? Yes, I am! 16473 / 9093 / 2614 Регистрация: 21.10.2017 Сообщений: 20,799 |
|
16.05.2020, 18:38 |
5 |
PyCharm -> ctrl+L Ctrl+Alt+L
2 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
16.05.2020, 18:38 |
Помогаю со студенческими работами здесь Pep8 функция foo(size + 1, arr)
Синтаксис переноса строки в PEP8 Запишите команду согласно PEP8 Что мешает правильному переводу PEP8?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 5 |
Я начинающий Python, я читаю стандарты pep, которые должны следовать при программировании на python. Http://legacy.python.org/dev/peps/pep-0008
Теперь у меня есть сомнения. Поскольку они упомянули, что вы не должны помещать пробелы вокруг знака равенства при использовании аргумента ключевого слова или значения параметра по умолчанию в функциях или в Dict.
Например
ДА
def myfunc(key1=val1, key2=val2, key3=val3)
НЕТ
def myfunc(key1 = val1, key2 = val2, key3 = val3)
Thats штраф, но что, если я сломаю их в несколько строк. что-то вроде этого (когда у нас много параметров или длинное имя)
def myfunc(key1=val1, key2=val2, key3=val3)
В этом случае, я думаю, мы должны положить пространство вокруг знака равенства. я прав. потому что все это о читаемости, но мне просто любопытно, есть ли для этого стандарт. Ищите лучшие практики.
То же самое для Дикта.
new_dict= Dict(
key1=val1,
key2=val2,
key3=val3
)
И я должен поместить запятую после последнего аргумента в dict в отличие от упомянутого выше примера, я не поместил запятую после последнего значения (key3 = val3)
17 июль 2014, в 20:41
Поделиться
Источник
3 ответа
PEP8 четко говорит:
Не используйте пробелы вокруг знака = при использовании для указания аргумента ключевого слова или значения параметра по умолчанию.
В обоих случаях вам не нужно помещать пробелы вокруг знака равенства.
Если вы не уверены, соответствует ли ваш код стандарту PEP8 или нет, используйте инструмент анализа статического кода flake8
. Это приведет к предупреждению в случае нарушения стиля кода.
Пример:
У вас есть дополнительные пробелы вокруг равных знаков:
def myfunc(key1 = 'val1',
key2 = 'val2',
key3 = 'val3'):
return key1, key2, key3
flake8
выводит предупреждение для каждого неожиданного пробела:
$ flake8 test.py
test.py:3:16: E251 unexpected spaces around keyword / parameter equals
test.py:3:18: E251 unexpected spaces around keyword / parameter equals
test.py:4:16: E251 unexpected spaces around keyword / parameter equals
test.py:4:18: E251 unexpected spaces around keyword / parameter equals
test.py:5:16: E251 unexpected spaces around keyword / parameter equals
test.py:5:18: E251 unexpected spaces around keyword / parameter equals
alecxe
17 июль 2014, в 16:21
Поделиться
Thats штраф, но что, если я сломаю их в несколько строк. что-то вроде этого (когда у нас много параметров или длинное имя)
def myfunc(key1=val1, key2=val2, key3=val3)
В коде, который вы указываете, вы не помещаете пробелы вокруг =
, так что вы соблюдаете pep8 в отношении расстояния между операторами (ваш отступ не соответствует pep8).
В общем, вы можете написать свой код, как вам нравится. Если вы не согласны с pep8, другие люди обычно не смогут найти ваш код как легко читаемый. Если у вас есть локальные стандарты в вашей компании, это должно быть отменено pep8. Если у вас нет стандартов, которые заставляют вас нарушать pep8, ваши коллеги, скорее всего, ненавидят вас за нарушение pep8.
Если у вас нет стандарта вообще, в будущем вы также будете ненавидеть подарок.
Marcin
17 июль 2014, в 16:36
Поделиться
Нет. Не помещайте пробелы вокруг равных знаков при объявлении kwargs. Подумайте об этом так: если вы просто просматриваете строки кода, вы хотите тренировать свои глаза, чтобы увидеть разницу между оператором присваивания, используемым во время обычного потока программы (спам = True) и kwarg, особенно если он на собственной линии (спам = True).
Что касается конечной запятой, я всегда чувствовал, что конечная запятая предлагает коллеге или читателю, что я чувствую, что список, dict, множество аргументов и т.д. Могут быть подвержены расширению в будущем. Если я достаточно уверен, что структура представляет его зрелое состояние, я удаляю его.
jMyles
17 июль 2014, в 15:41
Поделиться
Ещё вопросы
- 1Расовые условия с использованием Office.js в Excel
- 1Создайте целое число из dict внутри списка. Питон новичок
- 0Cycle2 Slideshow несколько пейджеров не работает
- 1log4net в библиотеке классов
- 0Очень простая настройка CSS и HTML: почему моя страница показывает случайные результаты?
- 0Как обновить страницу и добавить параметр URL?
- 1Линейный график D3 JS начинается с 0
- 0Как сделать окно командной строки открытым в верхнем левом углу?
- 1Извлекать числа по позиции в Пандах?
- 1как избежать java.sql.SQLException: [Microsoft] [ODBC Microsoft Access Driver] не смог найти файл ‘(неизвестно)’
- 0N Queen с использованием C ++ и возврат с помощью динамического 2D-массива
- 1Сохранение стилей при замене слов в python-docx
- 0угловой JS NG-повтор в одном элементе textarea
- 0Угловое извлечение всех заголовочных файлов html в один файл
- 1Как обрабатывать исключения ошибок с RxJava 2?
- 0PHP API Parsehub
- 0Ошибка: ожидаемый идентификатор
- 0Выбираемые строки для более чем одной Datatable страницу?
- 0Запустите Azure WebJob из Azure WebSite в PHP
- 1java.lang.IllegalStateException: Невозможно выполнить это действие на незапечатанном экземпляре
- 1Модуль веб-модуля RefrenceError не определен
- 0jQuery .on () и .not ()
- 1System.Windows.Forms.WebBrowser Проблема с доступом к сценарию
- 0Сохраните отфильтрованный список перед применением другого фильтра с помощью ng-repeat
- 0Преобразование формата объекта JSON с помощью angularjs
- 0Rails Active Record Query Total отправляется в будний день
- 0Получение данных с сервера с обещанием, используя angularjs
- 1Добавление части кортежа в новый список
- 0привязка к объекту iframe или html5
- 1Как объявить DOCTYPE и ENTITY в XML с помощью StAX Parser в Java
- 0Как я могу проверить функцию синхронизации в C ++
- 1Обобщения Java с любым типом <?>
- 1Не удается получить информацию XML в Java
- 0Пользовательская тема Tumblr исчезает при выходе
- 0Атрибут количества столбцов CSS3
- 1Как удалить строки с повторяющимися значениями столбцов во фрейме данных Pandas?
- 0Дизайн базы данных — много таблиц с уникальными тегами или одна таблица со всеми из них?
- 1Как установить автопрокрутку в JTextArea, когда она установлена в положение НЕ редактируемое?
- 0Использование CASE для нескольких условий в запросе MySQL
- 0JQuery — слияние / несколько $ (это) My в той же функции
- 0Javascript / JQuery: как что-то переопределить?
- 1Как это сделать в C (из Java)
- 1преобразовать строку даты в дату ISO с часовым поясом
- 1Как записать текстовый вывод в файл?
- 0Инициализация базы данных Ghost при новой установке
- 0Как мне создать регулярное выражение, которое добавляет все мои селекторы стиля с идентификатором
- 0Как использовать VBA для изменения «проверенного» свойства переключателей на веб-странице
- 1WPF Treeview печатает свойство строкового типа и рассматривает каждую букву как элемент
- 1Как вернуть ключи карты в соответствии с условием?