Je suis en train d'apprendre Python et j'ai atteint la section concernant la pass
déclaration. Le guide que j'utilise le définit comme étant une Null
instruction couramment utilisée comme espace réservé.
Je ne comprends toujours pas bien ce que cela signifie. Quelqu'un peut-il me montrer une situation simple / basique où la pass
déclaration serait utilisée et pourquoi elle est nécessaire?
pass
serait utile lorsque vous souhaitez remplacer une méthode dans une sous-classe pour ne rien faire.pass
leexcept
bloc est très pratique.Réponses:
Supposons que vous concevez une nouvelle classe avec des méthodes que vous ne souhaitez pas encore implémenter.
Si vous omettiez le
pass
, le code ne s'exécuterait pas.Vous obtiendrez alors un:
Pour résumer, la
pass
déclaration n'a rien de particulier, mais elle peut agir comme un espace réservé, comme démontré ici.la source
return
, mais avec une légère perte de clarté.pass
, mais je ne comprends toujours pas vraiment ce qu'il fait. Y a-t-il une utilité pour cela dans le code de production? D'après votre exemple, je choisirais de ne pas ajouter cette méthode jusqu'à ce que je sois prêt à l'implémenter, ou je le ferais simplementreturn
.Python a l'exigence syntaxiques blocs de code (après
if
,except
,def
,class
etc.) ne peuvent pas être vides. Les blocs de code vides sont cependant utiles dans une variété de contextes différents, comme dans les exemples ci-dessous, qui sont les cas d'utilisation les plus fréquents que j'ai vus.Par conséquent, si rien n'est censé se produire dans un bloc de code, un
pass
est nécessaire pour qu'un tel bloc ne produise pas deIndentationError
. Alternativement, n'importe quelle instruction (y compris juste un terme à évaluer, comme leEllipsis
littéral...
ou une chaîne, le plus souvent une docstring) peut être utilisée, mais celapass
indique clairement que rien n'est censé se produire et n'a pas besoin d'être réellement évalué et (au moins temporairement) stocké en mémoire.Ignorer (tout ou) un certain type de
Exception
(exemple dexml
):Remarque: Ignorer tous les types de relances, comme dans l'exemple suivant de
pandas
, est généralement considéré comme une mauvaise pratique, car il intercepte également les exceptions qui devraient probablement être transmises à l'appelant, par exempleKeyboardInterrupt
ouSystemExit
(ou mêmeHardwareIsOnFireError
- Comment savez-vous que vous n'êtes pas s'exécutant sur une boîte personnalisée avec des erreurs spécifiques définies, que certaines applications appelantes voudraient connaître?).Au lieu de cela, utiliser au moins
except Error:
ou dans ce cas de préférenceexcept OSError:
est considéré comme une bien meilleure pratique. Une analyse rapide de tous les modules python que j'ai installés m'a donné que plus de 10% de toutes lesexcept ...: pass
instructions interceptent toutes les exceptions, donc c'est toujours un modèle fréquent dans la programmation python.Dériver une classe d'exception qui n'ajoute pas de nouveau comportement (par exemple dans
scipy
):De même, les classes conçues comme classe de base abstraite ont souvent une
__init__
méthode explicite vide ou autre que les sous-classes sont censées dériver. (par exemplepebl
)Tester ce code s'exécute correctement pour quelques valeurs de test, sans se soucier des résultats (de
mpmath
):Dans les définitions de classe ou de fonction, souvent une docstring est déjà en place comme instruction obligatoire à exécuter comme seule chose dans le bloc. Dans de tels cas, le bloc peut contenir
pass
en plus de la docstring afin de dire «Ceci est en effet destiné à ne rien faire», par exemple danspebl
:Dans certains cas,
pass
est utilisé comme espace réservé pour dire "Cette méthode / classe / if-block / ... n'a pas encore été implémentée, mais ce sera l'endroit pour le faire", bien que je préfère personnellement leEllipsis
littéral...
afin de faire une distinction stricte entre ceci et le «no-op» intentionnel dans l'exemple précédent. ( Notez que le littéral Ellipsis est une expression valide uniquement en Python 3 )Par exemple, si j'écris un modèle en traits larges, je pourrais écrire
où d'autres pourraient avoir
avant
comme rappel pour remplir la
update_agent
fonction ultérieurement, mais exécutez déjà quelques tests pour voir si le reste du code se comporte comme prévu. (Une troisième option pour ce cas estraise NotImplementedError
. Ceci est utile en particulier pour deux cas: Soit «Cette méthode abstraite doit être implémentée par chaque sous-classe, il n'y a pas de façon générique de la définir dans cette classe de base» , ou «Cette fonction, avec ce nom n'est pas encore implémenté dans cette version, mais voici à quoi ressemblera sa signature » )la source
Outre son utilisation comme espace réservé pour les fonctions non implémentées,
pass
peut être utile pour remplir une instruction if-else ("Explicit vaut mieux qu'implicite.")Bien sûr, dans ce cas, on utiliserait probablement
return
au lieu d'une affectation, mais dans les cas où une mutation est souhaitée, cela fonctionne mieux.L'utilisation de
pass
ici est particulièrement utile pour avertir les futurs responsables (y compris vous-même!) De ne pas mettre des étapes redondantes en dehors des instructions conditionnelles. Dans l'exemple ci-dessus,flag
est défini dans les deux cas spécifiquement mentionnés, mais pas dans le caselse
. Sans utilisationpass
, un futur programmeur pourrait se déplacerflag = True
en dehors de la condition, ce qui se produiraflag
dans tous les cas.Un autre cas est avec la fonction passe-partout souvent vue au bas d'un fichier:
Dans certains fichiers, il peut être judicieux de laisser cela
pass
pour permettre une édition plus facile plus tard, et pour rendre explicite que rien ne devrait se produire lorsque le fichier est exécuté seul.Enfin, comme mentionné dans d'autres réponses, il peut être utile de ne rien faire lorsqu'une exception est interceptée:
la source
flag = False
avant leif ... elif
bloc afin d'éviter des erreurs obscures "NameError: nom 'flag' n'est pas défini" plus tard. En ce qui concerne le second exemple, il semble bizzar d'avoir à ajouterif __name__ == "__main__": pass
à la majorité des fichiers Python qui ne font rien lorsqu'ils sont exécutés directement (ce qui est le cas lorsque vous écrivez du code modulaire). Avec Python> = 3.0, vous devez utiliser...
(points de suspension) au lieu depass
pour indiquer les blocs "terminer plus tard".La façon la meilleure et la plus précise de penser
pass
est de dire explicitement à l'interprète de ne rien faire. De la même manière le code suivant:signifie "si j'appelle la fonction foo (x, y), additionne les deux nombres que les étiquettes x et y représentent et restitue le résultat",
signifie "Si j'appelle la barre de fonctions (), ne faites absolument rien."
Les autres réponses sont tout à fait correctes, mais elles sont également utiles pour certaines choses qui n'impliquent pas de conservation de place.
Par exemple, dans un peu de code sur lequel j'ai travaillé récemment, il était nécessaire de diviser deux variables, et il était possible que le diviseur soit nul.
produira évidemment une ZeroDivisionError si b vaut zéro. Dans cette situation particulière, laisser c comme zéro était le comportement souhaité dans le cas où b était zéro, j'ai donc utilisé le code suivant:
Une autre utilisation, moins standard, est un endroit pratique pour mettre un point d'arrêt pour votre débogueur. Par exemple, je voulais qu'un peu de code pénètre dans le débogueur à la 20e itération d'une instruction for ... in. Donc:
avec le point d'arrêt sur passe.
la source
def bar(): pass
ne fait "absolument rien". Il revient toujoursNone
, implicitement.Un cas d'utilisation courant où il peut être utilisé «tel quel» est de remplacer une classe juste pour créer un type (qui est par ailleurs le même que la superclasse), par exemple
Vous pouvez donc lever et intercepter des
Error
exceptions. Ce qui importe ici, c'est le type d'exception plutôt que le contenu.la source
pass
en Python ne fait fondamentalement rien, mais contrairement à un commentaire, il n'est pas ignoré par l'interpréteur. Vous pouvez donc en profiter dans de nombreux endroits en en faisant un espace réservé:1: Peut être utilisé en classe
2: Peut être utilisé dans les instructions en boucle et conditionnelles:
3: Peut être utilisé en fonction:
pass
est surtout utilisé lorsque le programmeur ne veut pas donner d'implémentation pour le moment mais veut toujours créer une certaine classe / fonction / instruction conditionnelle qui peut être utilisée plus tard. Étant donné que l'interpréteur Python ne permet pas l'instruction classe / fonction / conditionnelle vide ou non implémentée, il donne une erreur:pass
peut être utilisé dans de tels scénarios.la source
Vous pouvez dire que passer signifie une opération NOP (No Operation). Vous obtiendrez une image claire après cet exemple: -
Programme C
Maintenant, comment allez-vous écrire cela en Python: -
Mais votre code donnera une erreur car il nécessitait un bloc en retrait après elif . Voici le rôle du mot - clé pass .
Maintenant, je pense que c'est clair pour vous.
la source
&&
opérateur n'existe pas en PythonJ'aime l'utiliser lors de la suppression de tests. Je suis souvent conscient de ce que j'aimerais tester, mais je ne sais pas trop comment le faire. L'exemple de test ressemble à ce que sebastian_oe a suggéré
la source
assert False
ou deassert 0
cette façon, vous serez toujours noté que vous devez ajouter une implémentation :)L'instruction pass ne fait rien. Il peut être utilisé lorsqu'une instruction est requise syntaxiquement mais que le programme ne nécessite aucune action.
la source
Honnêtement, je pense que les documents officiels de Python le décrivent assez bien et fournissent quelques exemples:
la source
comme le dit le livre, je ne l'utilise que comme un espace réservé temporaire, à savoir,
puis remplir plus tard le scénario où
var == 2000
la source
Pass fait référence à ignorer .... aussi simple que cela soit .... si la condition donnée est vraie et que la prochaine instruction est pass, elle ignore cette valeur ou itération et passe à la ligne suivante ..... Exemple
Sortie: imprime tous les nombres impairs de 1 à 100
C'est parce que le module du nombre pair est égal à zéro, donc il ignore le nombre et passe au nombre suivant, puisque le module des nombres impairs n'est pas égal à zéro, la partie Else de la boucle est exécutée et imprimée
la source
SyntaxError
. En outre, ce n'est pas une bonne utilisationpass
car vous pouvez simplement le fairefor i in range(1,100):print(i)if i%2else""
Voici un exemple où j'extrayais des données particulières d'une liste où j'avais plusieurs types de données (c'est ce que j'appellerais dans R-- désolé si c'est la mauvaise nomenclature) et je voulais extraire uniquement des entiers / des données numériques et NON des caractères .
Les données ressemblaient à:
Je voulais supprimer tous les caractères alphabétiques, j'ai donc demandé à la machine de le faire en sous-configurant les données et en "passant" les données alphabétiques:
la source
L'instruction pass en Python est utilisée lorsqu'une instruction est requise syntaxiquement mais que vous ne voulez exécuter aucune commande ni aucun code.
L'instruction pass est une opération nulle; rien ne se passe quand il s'exécute. Le pass est également utile dans les endroits où votre code finira par aller, mais n'a pas encore été écrit (par exemple, dans les talons par exemple):
`Exemple:
Cela produira le résultat suivant:
Le code précédent n'exécute aucune instruction ou code si la valeur de la lettre est «h». L'instruction pass est utile lorsque vous avez créé un bloc de code mais qu'il n'est plus nécessaire.
Vous pouvez ensuite supprimer les instructions à l'intérieur du bloc, mais laisser le bloc avec une instruction pass afin qu'il n'interfère pas avec les autres parties du code.
la source
pass est utilisé pour éviter les erreurs d'indentation en python Si nous prenons des langages comme c, c ++, java, ils ont des accolades comme
Mais en python, il a utilisé l'indentation au lieu des accolades, donc pour éviter de telles erreurs, nous utilisons pass. Souvenez-vous que vous jouiez à un quiz et
Exemple de programme,
la source