Unexpected spaces around keyword parameter equals ошибка

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

user3810188's user avatar

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

Marcin's user avatar

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

alecxe's user avatar

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

jMyles's user avatar

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

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Python
1
2
3
4
5
6
7
8
9
10
HeroPhrases = {}
 
while (line := input()) != "!ВСЁ":
    hero, phrase = line.split(": ")
    if hero not in HeroPhrases:
        HeroPhrases[hero] = []
    HeroPhrases[hero].append(phrase)
 
for hero, phrases in HeroPhrases.items():
    print(f"{hero} - {'; '.join(reversed(phrases))}")

./solution.py:3:12: E203 whitespace before ‘:’
./solution.py:3:13: E231 missing whitespace after ‘:’
./solution.py:3:13: E999 SyntaxError: invalid syntax
./solution.py:3:15: E251 unexpected spaces around keyword / parameter equals



0



Эксперт Python

5407 / 3831 / 1214

Регистрация: 28.10.2013

Сообщений: 9,554

Записей в блоге: 1

15.05.2020, 17:05

2

отфармотировать по стандарту PEP8

Может, сначала сдашь русский?

И еще: ты видел, что люди выкладывают сюда код в тегах Python кода, а не тупой нечитабельной лапшой?



1



Просто Лис

Эксперт Python

5249 / 3270 / 1009

Регистрация: 17.05.2012

Сообщений: 9,605

Записей в блоге: 9

15.05.2020, 17:28

3

PyCharm -> ctrl+L



0



unfindable_404

Эксперт Python

691 / 474 / 204

Регистрация: 22.03.2020

Сообщений: 1,052

15.05.2020, 17:54

4

Дело не в PEP8. Код, который вы запускаете, поддерживается только Python3.8. Но вы запускаете его на Python более старой версии. Отсюда и ошибки. Я поправил.

Python
1
2
3
4
5
6
7
8
9
10
11
12
HeroPhrases = {}
 
line = input()
while line != "!ВСЁ":
    hero, phrase = line.split(": ")
    if hero not in HeroPhrases:
        HeroPhrases[hero] = []
    HeroPhrases[hero].append(phrase)
    line = input()
 
for hero, phrases in HeroPhrases.items():
    print(f"{hero} - {'; '.join(reversed(phrases))}")



2



Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

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)
foo(size+1, arr)

PEP8
Всем привет, у меня проблема в 8 строке кода с оформлением, может заменить на что то надо?

Синтаксис переноса строки в PEP8
Здравствуйте! Подскажите, пжлст, в чем ошибка синтаксиса переноса строки в PEP8, вроде делаю по…

Запишите команду согласно PEP8
Запишите команду ARRAY =input().split()*(2+2)*Number так, как предписывает PEP8.

Что мешает правильному переводу PEP8?
Мысль о том, что ни одно доброе дело не остаётся безнаказанным, упорно
возникает у меня каждый раз…

Как правильно перенести строку по правилам PEP8
arr = arr + arr + + ‘.’] + arr
в каком месте правильно поставить и сколько пробелов нужно…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

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Как вернуть ключи карты в соответствии с условием?

Сообщество Overcoder

Понравилась статья? Поделить с друзьями:
  • Unarc dll как исправить эту ошибку
  • Unexpected error opening catalog lightroom ошибка
  • Unarc dll исправляем ошибки при установке игр
  • Unexpected eof while parsing python ошибка
  • Unarc dll выдал код ошибки 12