0
votes

Y a-t-il de toute façon une déclaration de retour peut contenir un si, des conditionnels elifs sans l'autre à la fin?

J'essaie de trouver la réponse partout, mais je n'arrive pas à le trouver. Je veux être capable de retourner une déclaration dans ma fonction avec un si et un) elif / s, mais sans autre (juste à des fins d'apprentissage). Je suis conscient que vous pouvez faire quelque chose comme ceci:

def my_func(s):
    return "a list" if type(s) == list else "a string" if type(s) == str else "not list or string"


1 commentaires

... Donc Que devrait-on renvoyer la fonction en cas de manquant sinon ? Lorsque vous dites "sur la même ligne", vous disez essentiellement que vous voulez une expression conditionnelle , ceci est distinct de la if-elif-elif-elif-elife déclaration . Expressions Doit retourner une valeur, vous devez donc toujours répondre à ce cas sinon . Mais oui, je suis aussi d'accord, juste depuis un point de vue de style, cela ne devrait pas être une ligne.


5 Réponses :


2
votes

Non, ce n'est pas possible. Voir la langue SPECS et le PEP 308

En cas de retour, il suffit d'ajouter Renvoyer quelque chose si condition d'autre


0 commentaires

2
votes

S'il s'agit d'une ligne unique, vous pouvez avoir: xxx

et vous ne disposez pas (explicitement) avoir un mot clé utilisé. Notez que cela ne peut pas être enchaîné. Notez également que c'est de toute façon équivalente à: xxx

comme toute fonction ne renvoyant pas explicitement sinon retournera aucun


.

Si vous envisagez des constructions multilignes, veuillez noter que vous pouvez faire quelque chose comme: xxx

qui n'a pas de explicite mais est équivalent à la fois: xxx

et: xxx


donc, tout dans tout, il n'y a pas beaucoup valeur dans non ayant un sinon à la fin ou non à l'aide de la a si condition blanche b expression.

Il est Probablement pas idéal pour la lisibilité pour chaîner plusieurs si-ele expressions de toute façon. Il suffit d'utiliser plusieurs lignes et de profiter de la lisibilité du code.


Si votre seul problème est de savoir si l'expression conditionnelle nécessite el / code> comme Une partie de la grammaire Python, alors la réponse est la suivante: oui. Voir la pertinence Pep308 pour plus d'informations.


3 commentaires

Oui, j'étais au courant du premier bloc de code dans votre réponse, mais cela, comme vous l'avez dit, vous ne pouvez pas être enchaîné sans plus ELIF / S sur la même ligne, car ce bloc de code est essentiellement identique à celui d'avoir le si sur un ligne et le retour 10 en retrait.


@Codinggrind Si la question est uniquement sur Expression conditionnelle , vous devez avoir un sinon et c'est tout.


@ Norok2 Oh, d'accord Merci pour la réponse mise à jour cependant.



0
votes

Vous pouvez écrire la même idée en utilisant le retour à l'intérieur de la déclaration IF '' Si (type (s) == liste): retour .... ''


2 commentaires

Qui ne permet pas de faire elif s


Merci, je ne savais pas à ce sujet :)



1
votes

Comme indiqué, il s'agit d'une "expression conditionnelle". Les expressions doivent toujours résoudre à un objet mais sans le sinon cette expression ne serait pas. Aucune est raisonnable.


0 commentaires

0
votes

in retour x code>, x code> est un Expression qui doit être évaluée à un objet, quoi qu'il arrive. Donc, vous ne pouvez pas omettre le sinon code> partie du Opérateur ternaire (c'est pourquoi cela s'appelle ternaire et non "ternaire ou binaire" ;-)). Cela étant dit, vous pouvez raccourcir votre code:

def my_func(s):
    return {list: "a list", str: "a string"}.get(type(s), "not list or string")


0 commentaires