2015-05-28 4 views
0

Примера противного присвоения с использованием __ __ SetItem:Возможно ли иметь многострочное назначение в Python?

self.outer_scopes[self.children.item(i).getNodeName()][self.children.item(i).item(j).getNodeName()] = self.children.item(i).item(j).getTextContent() 

Можно ли сделать что-то вроде этого?

self.outer_scopes[self.children.item(i).getNodeName()][self.children.item(i).item(j).getNodeName()] 
= 
self.children.item(i).item(j).getTextContent() 

Я имею в виду, чтобы разделить назначение, а не строки после него с \ или что-то еще.

+2

вы не должны доступа к атрибутам на 5 уровней. Возможно, вы ошиблись в дизайне. – Daniel

ответ

1

Кронштейны, так же, как круглые скобки, вызывать неявные строки продолжения:

self.outer_scopes[ 
    self.children.item(i).getNodeName() 
    ][ 
    self.children.item(i).item(j).getNodeName() 
    ] = self.children.item(i).item(j).getTextContent() 

Тем не менее, это выкрикивает по крайней мере мало рефакторинга , так как вы получаете доступ к self.children.item(i) три раза.

item_i = self.children.item(i) 
self.outer_scopes[ 
    item_i.getNodeName() 
    ][ 
    item_i.item(j).getNodeName() 
    ] = item_i.item(j).getTextContent() 
2

Вы можете использовать обратную косую черту:

self.outer_scopes[self.children.item(i).getNodeName()][self.children.item(i).item(j).getNodeName()] \ 
= \ 
self.children.item(i).item(j).getTextContent() 

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

4

Используйте переменные, чтобы сократить свое выражение. Будет ли найти лучшие имена, если я знаю больше контекста:

item_i = self.children.item(i) 
item_j = item_i.item(j) 
outer_scope = self.outer_scopes[item_i.getNodeName()] 
outer_scope[item_j.getNodeName()] = item_j.getTextContent() 
1

Вы можете использовать разрывы строк произвольно в боковых кронштейнов ([] или () или {}) в Python.

self.outer_scopes[ 
    self.children.item(i).getNodeName() 
][self.children.item(i).item(j).getNodeName() 
] = self.children.item(i).item(j).getTextContent() 

действителен, но он, вероятно, не выиграет вас ни в каких точках стиля.

Вы могли бы также всегда:

foo = self.children.item(i).getNodeName() 
bar = self.children.item(i).item(j).getNodeName() 
self.outer_scopes[foo][bar] = self.children.item(i).item(j).getTextContent() 

Существует также метод \ (хотя лично я не люблю это):

self.outer_scopes[ 
    self.children.item(i).getNodeName()][self.children.item(i).item(j).getNodeName()] = \ 
self.children.item(i).item(j).getTextContent() 
Смежные вопросы