a[raw_input('Enter something')]=input('Enter another something')
a[raw_input('Enter something')]=input('Enter another something')
vananabuНе нужно. Постарайтесь воспользоваться здравым смыслом. Чтобы чтото присвоить его ведь надо иметь? те надо сначала вычислить, а потом уж класть на место.
нужно углублятся в нюансы работы интерпритатора?
Алгоритм работыВозможно я не правильно понимаю, но тут же написано сначала вычислить слева, а затем справа..
Вычислить левостороннее значение первого операнда. На этом этапе становится известным местонахождение целевого объекта, приёмника нового значения.
Вычислить правостороннее значение второго операнда. Этот этап может быть сколь угодно большим и включать другие операторы (в том числе присвоения).
Присвоить вычисленное правостороннее значение левостороннему значению. Во-первых, при конфликте типов должно быть осуществлено их приведение (либо выдано сообщение об ошибке ввиду его невозможности). Во-вторых, собственно присваивания значения в современных языках программирования может быть подменено и включать не только перенос значений ячеек памяти (например, в «свойства» объектов в C#, перегрузка операторов).
Возвратить вычисленное правостороннее значение как результат выполнения операции. Требуется не во всех языках (например, не нужно в Паскале).
vananabuПоправил wiki. Вообще компилятор может произвольно переставлять эти операции если сочтет это безопасным.
но тут же написано сначала вычислить слева
#include <iostream> #include <iomanip> using namespace std; class Tx { public: double v; double& operator[](int i) { cout<<"index of "<<v<<endl; return v; } }; int main() { Tx x[5]; for(int i=0;i<5;++i){x[i].v=i+1;} x[0][0]=x[1][0]=x[2][0]=x[3][0]=x[4][0]; return 0; } msvc 10: index of 4 index of 5 index of 3 index of 2 index of 1 g++4.8 index of 1 index of 2 index of 3 index of 4 index of 5
class Tx(object): def __init__(self,i): self.v=i def __getitem__(self,i): print("get ",self.v) return self.v def __setitem__(self,i,v): print("set ",self.v) self.v=v arr = [Tx(i) for i in range(5)] arr[0][0]=arr[1][0]=arr[2][0]=arr[3][0]=arr[4][0] ('get ', 4) ('set ', 0) ('set ', 1) ('set ', 2) ('set ', 3)