Pour une raison quelconque, cette fonction m'a confondu:
def protocol(port): if port == "443": return True + "https://" else: return True + "http://"
7 Réponses :
et code> renvoie le bon opérande si la gauche est vraie.
ou code> renvoie le bon opérande si la gauche est fausse. Sinon, ils retournent tous les deux l'opérande gauche. Ils sont dit
Ah, merci Ignacio. Je ne sais pas comment j'ai eu jusqu'à présent dans Python sans comprendre cela. C'est la première fois que je l'ai déjà vu utilisé comme ça. +1
C'est un idiome de vieille ish; Insertion de parenthèses pour montrer la priorité, donc si dans le python moderne, une meilleure façon de traduire cet idiome ancien ISH est le suivant: p> x et y code> renvoie
y code> si
x code> est trancheuse,
x code> si
x code> est falsifié;
a ou b code>, vice versa, renvoie
A code> si c'est truc, sinon
B code>. p>
== "443" code> est vrai, cela renvoie le RHS du
et code>, à savoir
"https: //" code>. Sinon, le
et code> est faux, donc le
ou code> est en jeu et renvoie `" http: // ", son em> rhs. P >
@Alex +1 Merci pour l'explication approfondie. Ils ont apparemment fait pour que je ne puisse pas accepter une réponse pendant 10 minutes :( mais bonne réponse.
@orokusaki, merci, et je suis sûr que vous pourrez l'accepter plus tard ;-).
+1 Pour mentionner l'opérateur ternaire de Python, beaucoup plus facile à lire / comprendre IMHO
J'ai appris il y a longtemps pour utiliser des parenthèses pour rendre l'interprète / compilateur faire ce que i i> veulent que le code fasse, plutôt que d'être à la merci de la priorité. Cela aide à documenter le code pour moi et tout qui le maintient après que je sache. Je considère que cela faisait partie du codage de manière défensive.
Ceci est un piratage laid non recommandé. Cela fonctionne en raison du comportement de court-circuit de Voici un exemple de la manière dont le préférez plutôt la notation la plus récente: p> et code> et
ou code> et qu'ils renvoient celui de leurs arguments plutôt qu'une valeur booléenne. L'utilisation de cette technique donne un risque d'introduire des bogues difficiles à trouver, alors ne l'utilisez pas dans le nouveau code.
et / ou code> idiome peut donner un résultat inattendu : p>
@Mark C'est la version que je connais et je n'ai jamais vu la version dans mon poteau avant aujourd'hui. +1
Vous voudrez peut-être lire sur le "et / ou la truc" de Python dans cet article Nature de et et à Python . C'est un peu comme le iif () code> dans vba ou vb, ou
?: Code> dans les langages de style C. p>
@Abel merci. Je viens de le lire, article intéressant. J'ai utilisé le retourner A ou B code> syntaxe beaucoup mais pour une raison quelconque, cet extrait ne jive pas.
Cette construction fonctionne car il "se déroule" au code suivant:
a et b -> p> A ou B -> P>
Pour la plupart des travaux, sauf em> si Cependant, tout cela a changé en Python 2.5, lorsque l'opérateur ternaire ou conditionnel a été ajouté à la langue, vous permettant d'utiliser le nettoyant c et x ou y code> est la tentative précoce à long terme par les utilisateurs Python à proxy pour
C? X: y code> p>
x code> est
faux code> - cela a conduit à de nombreux bugs dans le code Python, donc FAQ Python A>, vous trouverez la solution plus correcte étant
(c et [x] ou [y]) [0] code> car une liste avec un seul élément, quelle que soit sa valeur booléenne évaluée, est toujours
vrai code>! Par exemple:
[aucun] code> est
vrai code> mais
Aucun code> n'est pas. L'exemple de OP ci-dessus fonctionne car la chaîne représentant
x code> n'est pas vide. P>
x si C STRY y code> comme indiqué dans d'autres messages ici. Si vous voyez du code à l'aide du format ancien, c'est que l'utilisateur a été un programmeur Python depuis longtemps qui n'a pas encore adopté la nouvelle syntaxe, ils coupent-la-coller d'autre code ancien, ou leur employeur utilise toujours 2.4.x ( ou des versions antérieures), etc. p>
Avec toutes les bonnes réponses, j'ai trouvé ces déclarations m'aidez-moi à me souvenir de cela mieux et à convaincre comment mon cerveau fonctionne (et espérons-le pour d'autres là-bas): P>
"et" renvoie le premier faux élément (par exemple, aucun, "", [], (), {}, 0) ou le dernier élément si aucun (pas de faux trouvé) P> < / li>
"ou" renvoie le premier véritable élément ou le dernier élément (par exemple non true trouvé) ** p> li> ul>
en résumé strong>: p>
Remarque Cette règle s'applique également à une chaîne tout "et" ou toutes "instruction" ou " p>
@ Répondeurs, voir ma mise à jour ultérieure de 1 minute. Désolé.
Rappelez-vous simplement que les déclarations 'et' et 'ou' ou 'ou' renvoient la dernière expression à évaluer. :)