При инициализации словаря с d = {}
помощью кода Pycharm инспектор генерирует предупреждение:
Это создание словаря может быть переписано как словарь литерала.
Если я перепишу это d = dict()
предупреждение исчезнет. Поскольку {}
уже является литералом словаря, я уверен, что сообщение ошибочное. Кроме того, похоже, что и то, d = {}
и другое d = dict()
действительно и Pythonic.
Этот связанный вопрос, кажется, заключает, что выбор - только вопрос стиля / предпочтения: различия между "d = dict ()" и "d = {}"
Почему Пичарм жаловался d = {}
?
ОБНОВИТЬ:
Мак прибил это. Предупреждение фактически применяется к нескольким строкам, а не только к той, которая была помечена.
Кажется, Pycharm ищет последовательность последовательных операторов, в которых вы инициализируете словарь, а затем устанавливаете значения в словаре. Например, это вызовет предупреждение:
d = {}
d['a'] = 1
Но этот код не будет:
d = {}
pass
d['a'] = 1
something
атрибута прямо в литерал dict вместо его назначения. на следующей строке.Ответы:
Каков следующий код в объявлении вашего словаря?
Я думаю, что Pycharm вызовет ошибку, если у вас есть что-то вроде:
как ты мог написать
Кстати: тот факт, что ошибка исчезает, если вы используете функцию, не обязательно означает, что Pycharm считает
dict()
буквальным. Это может означать, что он не жалуется на:НТН!
источник
dic = dict()
обходной путь ...d = { 'aaa': f1(something) }
аd = f2(d)
затем иd = f3(d)
т.д. ... Или, альтернативноd['bbb'] = f2(d)
,d['ccc'] = f3(d)
...?d = {}
,d['a'] = A
,d['b'] = f(d['a'])
,d['c'] = f(d['b'])
и т.д.d = {'a': A}
а затем просто сохранить последовательность, как вы обрисовали в общих чертах?Это можно отключить в настройках проекта или по умолчанию.
источник
для тех, кто любит (как и я) инициализировать словари с помощью одной операции
вместо многих строк, как
в конце концов я закончил с этим:
Пихарм не жалуется на это
источник
Словарь мог быть создан непосредственно, не инициализируя их сначала, а затем переназначая новые значения.
источник
У меня есть ситуация, когда это предупреждение выводит меня из себя. В моем случае я заполняю свой dict частично как литералы и частично из вывода кортежа функцией, например так:
Итак, если я не создаю промежуточные переменные для вывода get_other_values, PEP8 генерирует это предупреждение, даже если я создаю диктат с литералами. И я не могу назначить клавиши c и d в литерале, так как значения выводятся как кортеж.
источник