6
votes

Existe-t-il un moyen pythonique plus élégant d'exprimer l'expression conditionnelle suivante?

Je voudrais une manière plus pythonique pour la branche suivante si tout: xxx

existe un opérateur ternaire pour cela?


9 commentaires

pythoniciennes amour Le mot pythonic , même quand cela ne veut rien dire.


Quel est le problème avec l'utilisation de 6 lignes?


C'est probablement le meilleur moyen de le faire si vos trois do STH S sont très différents. S'ils peuvent être paramétrés, la branche pourrait être écrite plus concise. Dites-nous plus sur votre do STH s.


@Gantthomes tandis que c'est un peu vrai, je l'utilise habituellement comme «conforme au plus de choses dans importer ce ':)


Du [Lambda: A, Lambda: B, Lambda: C] [(A


@eumiro je change la question de manière appropriée. Oui, le do STH est paramétré.


@Blender, peut être écrit plus concis en utilisant CMP (A, B) :)


Qu'est-ce que ça va? une fonction ou une affectation?


@gnibbler: maintenant ceci je vais utiliser. Merci!


5 Réponses :


4
votes

Utilisez un opérateur ternaire imbriqué.

a.append('value') if a<b else b.append('value') if a==b else None


1 commentaires

Maintenant, vous me avez eu dans l'ambiance de golf [Func2, Func3, Func1] [CMP (A, B)] ()



1
votes

Vous pouvez faire quelque chose comme ceci: xxx

où * _action convient au code "do STH" dans votre question


2 commentaires

Tandis que et / ou -tricking Ça fonctionne, il le rend tout simplement beaucoup moins lisible imo.


@Atttilao. Je pense que Firsting est un adjectif de premier plan. La découpe courte et la logique est courante dans la plupart des langues ... et je suis fan :)



1
votes

VOTRE

if a <= b:
    (a,b)[a==b].append('value')


2 commentaires

@curieuse. Ouais, et il les a considéré comme différents seulement. Regardez la réponse à nouveau clairement.


@Curious - Est-ce? Il fait n'importe quoi uniquement si a <= b . Ensuite, il fait deux choses différentes selon que a ou a == b . Cela fonctionne, c'est juste laid.



0
votes

Pour votre EXACT EM>, l'un d'entre eux fonctionnera:

[b, a, []][cmp(x, y)].append('value')
[b, a, []][cmp(x, y)] += ['value']


1 commentaires

Ai-je commençais une sorte de compétition de golf?



4
votes

Évidemment, vous pouvez simplement laisser l'affaire d'entier off

if a<b:
   a.append('value')
elif a==b:
   b.append('value')


1 commentaires

C'est la seule amélioration réelle .