En Python, une seule ligne est difficile à faire, mais ce n'est pas impossible. Je pense que la raison pour laquelle une seule ligne est difficile à faire en Python est qu'il y a peu de choses qui peuvent être exprimées et que les instructions composées ne peuvent pas être écrites sur une seule ligne. Ici, nous allons introduire une méthode pour incorporer divers processus dans une expression.
ʻSi a: f () peut être écrit comme ʻa et f ()
. ʻSi non a: f () peut être écrit comme ʻa ou f ()
.
(Si vous n'êtes pas familier avec le court-circuit des opérateurs logiques, veuillez consulter http://qiita.com/gyu-don/items/a0aed0f94b8b35c43290.)
De plus, l'opérateur ternaire a une syntaxe légèrement désagréable. true_value if condition else false_value
Vous pouvez combiner plusieurs expressions en une seule expression en créant une touche ou une liste. Vous pouvez également récupérer la valeur à un emplacement spécifique en y faisant référence avec [0] ou [-1] à la fin.
Les boucles sont en notation d'inclusion de liste.
Surtout en Python3, les objets générateurs apparaissent partout. La différence entre une liste et un générateur est importante, surtout lorsque vous vous attendez à des effets secondaires. La notation d'inclusion de liste crée une liste jusqu'au dernier élément à la volée. D'autre part, le générateur n'évalue pas chaque élément tant qu'il n'est pas appelé par next (). Pour évaluer chaque élément, vous pouvez appeler next vous-même, utiliser list (gen) ou utiliser la notation d'inclusion de liste pour ... in.
lambda Vous pouvez créer des fonctions anonymes avec lambda, mais en Python, vous ne pouvez créer des fonctions anonymes qu'avec une seule expression.
Vous pouvez utiliser lambda pour lier des variables sans faire d'instruction. Veuillez l'utiliser dans les situations où il est difficile d'utiliser le point-virgule.
(lambda a, b: a + b) (f (), g ())
réalise ʻa = f (); b = g (); a + b`.
En Python, les affectations sont des instructions, mais dans list.append ce sont des expressions. Il peut être utile d'avoir une liste comme argument.
Exemple: une expression qui renvoie un résultat d'addition de 0 à 100 sans utiliser la somme ou la réduction
(lambda t: [t.append(t.pop()+x)or t[0] for x in range(101)][-1])([0])
Vous n'avez pas besoin de créer un combinateur Y compliqué, vous avez juste besoin que la fonction ait un argument qui se reçoit.
Exemple: 1 à 10 étages
(lambda f: f(10,f))(lambda n,f: n*f(n-1,f) if n>0 else 1)
fin.
Recommended Posts