L'instruction d'affectation Python peut être écrite comme suit.
a, b = 1, 2
Vous pouvez également écrire une fonction avec des arguments de longueur variable en écrivant comme suit.
def func(*args):
print(repr(args))
func(1)
#production: (1,)
func(1, 2)
#production: (1, 2)
Eh bien, cela fait un moment que j'ai commencé Python, donc j'en sais beaucoup, mais soudain je me suis demandé si je pouvais utiliser "*
" (astérisque) dans l'instruction d'affectation. Ça dépend.
a, *b = 1, 2, 3
print((a, b))
#production: (1, [2, 3])
Tu peux le faire!
Juste au cas où, si vous vérifiez quelles sont les spécifications,
Si la liste cible ne contient qu'une seule cible avec un astérisque au début, appelée cible "étoilée": L'objet est itérable et est au moins un élément de moins que le nombre de cibles dans la liste cible Doit avoir. Les cibles situées avant la cible étoilée reçoivent le premier élément de l'itérable de gauche à droite. La cible à la fin de l'itérable est attribuée à la cible après la cible étoilée. La cible étoilée se voit attribuer une liste des éléments restants de l'itérable (la liste peut être vide).
C'est bien écrit.
Faisons diverses choses.
a, *b = 1,
print((a, b))
#production: (1, [])
a, *b, c = 1, 2, 3, 4, 5
print((a, b, c))
#production: (1, [2, 3, 4], 5)
*a, = 1, 2, 3
print(a)
#production: [1, 2, 3]
Cependant, ce qui suit n'est pas bon.
a, b, *c = 1,
# ValueError: not enough values to unpack (expected at least 2, got 1)
#c peut être vide, mais a,La valeur à affecter à b doit être spécifiée.
*a = 1, 2, 3
# SyntaxError: starred assignment target must be in a list or tuple
# 「*Les cibles avec "" doivent être dans la liste taple.
Jusqu'à présent, ce n'était que du côté gauche, mais il semble qu'il puisse également être utilisé du côté droit.
d = 10, 20
a, b, c = 1, *d
print((a, b, c))
#production: (1, 10, 20)
# 「a, b, c = 1, d[0], d[1]"le même que.
Recommended Posts