166 votes

Quel est le meilleur en python, del ou delattr ?

C’est peut-être idiot, mais sa été lancinante au dos de mon cerveau pendant un certain temps.

Python nous donne deux manières intégrés pour supprimer les attributs d’objets, le mot de commande del et la fonction intégrée delattr . Je préfère delattr parce qu’elle je pense que c’est un peu plus explicite :

Mais je me demande si il pourrait y avoir des différences entre eux sous le capot.

253voto

Miles Points 12977

La première est plus efficace que la seconde. del foo.bar compile de deux instructions bytecode:

  2           0 LOAD_FAST                0 (foo)
              3 DELETE_ATTR              0 (bar)

alors qu' delattr(foo, "bar") de cinq:

  2           0 LOAD_GLOBAL              0 (delattr)
              3 LOAD_FAST                0 (foo)
              6 LOAD_CONST               1 ('bar')
              9 CALL_FUNCTION            2
             12 POP_TOP

Cela se traduit par la première course légèrement plus vite (mais c'est pas une énorme différence – .15 µs sur ma machine).

Comme les autres l'ont dit, vous devriez vraiment utiliser la deuxième forme lorsque l'attribut que vous supprimez est déterminée de façon dynamique.

[Modifiée pour afficher les instructions bytecode généré à l'intérieur d'une fonction, le compilateur peut utiliser LOAD_FAST et LOAD_GLOBAL]

37voto

Alex Fedorov Points 119
<ul> <li><strong>del</strong> est plus explicite et efficace ;</li> <li><strong>delattr</strong> permet la suppression d’attribut dynamique.</li> <p>Considérez les exemples suivants :</p><pre><code></code></pre><p>ou :</p><pre><code></code></pre><p>Vous ne pouvez pas le faire avec <strong>del</strong>.</p></ul>

17voto

Alex Gaynor Points 6217

Sans aucun doute l’ancien. À mon avis, c’est comme demander si est mieux que , et je ne pense pas que quelqu'un pose cette question  :)

14voto

Jason Baker Points 56682

C’est vraiment une question de préférence, mais le premier est sans doute préférable. J’utiliserais seulement l’autre si vous ne connaissez pas le nom de l’attribut que vous supprimez avance.

5voto

Algorias Points 1144

Tout comme getattr et setattr, delattr ne doit servir lorsque le nom d’attribut est inconnu.

En ce sens, il est à peu près équivalent à plusieurs fonctionnalités de python permettant d’accéder à une fonctionnalité intégrée à un niveau inférieur que vous avez normalement disponible, comme au lieu de et au lieu de

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