212 votes

Pourquoi l'inspecteur de Pycharm se plaint-il de "d = {}" ?

Lors de l'initialisation d'un dictionnaire avec d = {} L'inspecteur de code de Pycharm génère un avertissement, disant

Cette création de dictionnaire peut être réécrite comme un dictionnaire littéral.

Si je le réécris d = dict() l'avertissement disparaît. Depuis {} déjà es un dictionnaire littéral, je suis presque sûr que le message est erroné. De plus, il semble que les deux d = {} y d = dict() sont valables et pythoniques.

Cette question connexe semble conclure que le choix n'est qu'une question de style/préférence : différences entre "d = dict()" et "d = {}"

Pourquoi Pycharm se plaindrait-il de d = {} ?

UPDATE :

Mac l'a bien compris. L'avertissement s'applique en fait à plusieurs lignes, et pas seulement à celle qui a été signalée.

Pycharm semble rechercher une séquence d'instructions consécutives dans lesquelles vous initialisez un dictionnaire et définissez ensuite des valeurs dans le dictionnaire. Par exemple, ceci déclenchera l'avertissement :

d = {}
d['a'] = 1

Mais ce code ne le fera pas :

d = {}
pass
d['a'] = 1

266voto

mac Points 16282

Quel est le code qui suit la déclaration du dictionnaire ?

Je pense que PyCharm déclenchera l'erreur si vous avez quelque chose comme :

dic = {}
dic['aaa'] = 5

comme vous auriez pu l'écrire

dic = {'aaa': 5}

Note : Le fait que l'erreur disparaisse si vous utilisez la fonction dict() . Cela ne signifie pas nécessairement que pycharm croit dict() est un littéral. Cela pourrait simplement signifier qu'il ne s'en plaint pas :

dic = dict()
dic['aaa'] = 5

22voto

Craig Jackson Points 312

Cette fonction peut être désactivée dans les paramètres du projet ou les paramètres par défaut.

  • Naviguer vers Paramètres -> Inspections -> Python
  • Décochez la case "La création du dictionnaire pourrait être réécrite par le dictionnaire littéral".

11voto

Igor.K Points 165

Pour ceux qui aiment (comme moi) initialiser les dictionnaires en une seule opération

d = {
  'a': 12,
  'b': 'foo',
  'c': 'bar'
}

au lieu de plusieurs lignes comme

d = dict()
d['a'] = 12
d['b'] = ....

Au final, j'ai obtenu ceci :

d = dict()
d.update({
  'a': 12,
  'b': 'foo',
  'c': 'bar'
})

Pycharm ne se plaint pas sur ce point

2voto

Michael Hoffman Points 8557

{} est un littéral et dict() ne l'est pas :

Python 2.7 (r27:82500, Jul 30 2010, 07:39:35) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from dis import dis
>>> def f(): d = dict()
... 
>>> def g(): d = {} 
... 
>>> dis(f)
  1           0 LOAD_GLOBAL              0 (dict)
              3 CALL_FUNCTION            0
              6 STORE_FAST               0 (d)
              9 LOAD_CONST               0 (None)
             12 RETURN_VALUE        
>>> dis(g)
  1           0 BUILD_MAP                0
              3 STORE_FAST               0 (d)
              6 LOAD_CONST               0 (None)
              9 RETURN_VALUE        

Donc, oui, cela ressemble à une erreur.

0voto

Asnim P Ansari Points 1003
mydict = {
  a: 5,
  b:z+c/2
}

Le dictionnaire aurait pu être créé directement sans les initialiser d'abord et réaffecter ensuite les nouvelles valeurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X