2016-11-23 15 views
0

Прочитав лексический анализ Python 3, я немного запутался в последнем разделе о операторах [1] и разделителях. Символ @ указан как оператор и разделитель, а @= также указан как расширенный оператор присваивания. После формы других форсированных операторов присваивания, я бы ожидать, что это означает, что @ символ может быть использован как так:Что такое @ operator/delimiter в Python 3?

x = x @ y 

или

x @= y 

Я попытался использовать его таким образом, с целыми числами и строки без каких-либо успехов. Я знаком с использованием @ для декораторов, но не вижу, как расширенный оператор присваивания совместим с декораторами.

Какова цель @ и @= при использовании в качестве оператора и/или разделителя в Python 3?


[1] Python 3 - Операторы: https://docs.python.org/3/reference/lexical_analysis.html#operators

+0

как оператор умножает матрицу. 'a = np.arange (4) .reshape (2, 2); b = np.arange (4) .reshape (2, 2); print (a @ b) 'показывает' array ([[2, 3], [6, 11]]). Я видел, что он работает только с массивами numpy. – Elliot

+0

@Elliot, вы действительно выглядите правильно, но мне бы хотелось узнать, работает ли это за пределами numpy. Используя ваш пример, я попробовал 'a @ = b' и получил следующую ошибку: ' TypeError: Матричное умножение на месте не поддерживается (пока). Используйте 'a = a @ b' вместо 'a @ = b'.' –

ответ

0

Expressions состояние

The @ (at) operator is intended to be used for matrix multiplication. No builtin Python types implement this operator.

Таким образом, вы должны использовать NumPy или другие математические библиотеки, чтобы сделать x = x @ y работы.