2015-06-02 4 views
36

Интересно, что ,= или , = означает в python?Что значит, = означает в python?

Пример из Matplotlib:

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

@ArnabDatta Нет уа не может»; это будет 2-кортеж. Однако вы можете написать '(plot1,) = ...' или '[plot1] = ...'. – Veedrac

ответ

43

Это форма кортежа распаковке. С скобками:

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

ax01.plot() возвращает кортеж, содержащий один элемент, и этот элемент присваивается plot1. Без этой запятой (и, возможно, круглых скобок) plot1 был бы назначен весь набор. Обратите внимание на разницу между a и b в следующем примере:

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

Вы можете опустить скобки как в (a,) и (1,), я оставил их ради ясности.

+0

Это похоже на версию. Чтобы быть точным, можно упомянуть, что это невозможно, например. в Python 2.7 («ValueError: слишком много значений для распаковки»). Кроме того: почему я не могу «x ,,, = (1,2,3,4)»? –

+3

@ThomasWeller 1) приведенный выше пример работает в Python 2.7, эта ошибка означает, что кортеж, который вы пытаетесь распаковать, больше, чем количество переменных, предоставленных в lhs. 2) вы не можете, потому что это недопустимый синтаксис. Если вы хотите сохранить только первый элемент, тогда сделайте 'x, _, _, _ = (1,2,3,4)', где '_' является регулярным именем переменной, обычно используемым для сигнала _ don не заботьтесь об этом значении "_. В любом случае, я думаю, что 'x = foo [0]' в этом случае более ясный. –

+1

@StefanoSanfilippo в python 3 вы можете сделать ['x, * _ = (1,2,3,4)'] (https: //asmeurer.github.-й/python3-презентация/slides.html # 8) – Pureferret

2

Добавление переменной , после того, как переменная помещает ее в кортеж с одним элементом. Затем этому кортежу присваивается значение (с оператором =), возвращенным с ax01.plot(t,yp1,'b-').

17

Python позволяет поместить кортежи в левой части задания. Код в вопросе является примером этого, может показаться, что это особый случай оператора, но это действительно просто назначение кортежей для случая, которое происходит здесь. Некоторые примеры могут помочь:

a, b = (1, 2) 

который дает a = 1 и b = 2.

Теперь есть концепция кортежа одного элемента.

x = (3,) 

дает x = (3,), который является кортежем с одним элементом, синтаксис выглядит немного странно, но Python необходимо дифференцировать от простой скобки, так что имеет Запятую для этого (например z=(4) делает г быть целым числом 4, а не кортеж). Если вы хотите извлечь в настоящее время этот элемент, то вы хотели бы использовать что-то, как у вас в вопросе:

y, = x 

Теперь y есть 3. Обратите внимание, что это только кортеж присваивание здесь, синтаксис просто кажется немного странным потому что это кортеж длины один.

Смотрите этот сценарий для примера: http://ideone.com/qroNcx

Смежные вопросы