2015-06-02 18 views
36

Zastanawiam się, co oznacza ,= lub , = w python?Co znaczy, = oznacza w python?

przykład z matplotlib:

plot1, = ax01.plot(t,yp1,'b-') 
+0

@ArnabDatta Nie ya”nie może; to będzie 2-krotna. Możesz napisać '(plot1,) = ...' lub '[plot1] = ...', chociaż. – Veedrac

Odpowiedz

43

Jest to forma krotki rozpakowywania. Z nawiasami:

(plot1,) = ax01.plot(t,yp1,'b-') 

ax01.plot() zwraca parę zawierającą jeden element i element ten jest przypisany do plot1. Bez tego przecinka (i ewentualnie nawiasów), plot1 zostałaby przypisana cała krotka. Zaobserwować różnicę między a i b w poniższym przykładzie:

>>> def foo(): 
...  return (1,) 
... 
>>> (a,) = foo() 
>>> b = foo() 
>>> a 
1 
>>> b 
(1,) 

Można pominąć nawiasy zarówno w (a,) i (1,), zostawiłem je dla jasności.

+0

To wydaje się być specyficzne dla wersji. Mówiąc dokładniej, możesz wspomnieć, że nie jest to możliwe, np. w Pythonie 2.7 ("ValueError: zbyt wiele wartości do rozpakowania"). Ponadto: dlaczego nie mogę "x ,,, = (1,2,3,4)"? –

+3

@ThomasWeller 1) powyższy przykład działa w Pythonie 2.7, ten błąd oznacza, że ​​krotka, którą próbujesz rozpakować, jest większa niż liczba zmiennych podanych w lhs. 2) nie możesz, ponieważ nie jest poprawna składnia. Jeśli chcesz zachować tylko pierwszy element, wykonaj 'x, _, _, _ = (1,2,3,4)', gdzie '_' jest zwykłą nazwą zmiennej, tradycyjnie używaną do sygnalizowania _ "Nie przejmuj się tą wartością". W każdym razie, myślę, że 'x = foo [0]' jest w tym przypadku jaśniejsze. –

+1

@StefanoSanfilippo w python 3 możesz zrobić ['x, * _ = (1,2,3,4)'] (https: //asmeurer.github.io/python3-presentation/slides.html # 8) – Pureferret

2

Dodanie , po zmiennej umieszcza ją w krotce z pojedynczym elementem. Ta krotka jest następnie przypisana wartości (z operatorem =) zwrócony z ax01.plot(t,yp1,'b-').

17

Python pozwala na umieszczenie krotek po lewej stronie zadania. Kod w pytaniu jest tego przykładem, może wyglądać tak, jakby był szczególnym przypadkiem operatora, ale tak naprawdę dzieje się tutaj tylko przypadkowe zadanie krotki. Niektóre przykłady mogą pomóc:

a, b = (1, 2) 

co daje a = 1 i b = 2.

Teraz istnieje pojęcie krotki jednoczęściowej.

x = (3,) 

daje x = (3,) która jest krotką z jednego elementu, składnia wygląda nieco dziwnie, ale Python potrzebuje do odróżnienia od zwykłego nawiasie więc ma spływu przecinek na to (na przykład z=(4) sprawia oo jest wartością całkowitą 4, a nie krotki). Jeśli chciał teraz wyodrębnić ten element wtedy chcesz użyć czegoś jak masz w pytaniu:

y, = x 

teraz y to 3. Należy pamiętać, że jest to tylko krotka zadanie tutaj, składnia tylko wydaje się nieco dziwne ponieważ jest to krotka długość jednego.

Zobacz ten skrypt na przykład: http://ideone.com/qroNcx