是否可以在Python中进行多行分配?

时间:2015-05-28 19:27:50

标签: python line variable-assignment

使用__ setitem __:

的令人讨厌的作业示例
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()

我的意思是,要分配作业,而不是用\或其他任何内容后的字符串。

4 个答案:

答案 0 :(得分: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 :(得分:2)

您可以使用反斜杠:

var tag = "body";
new Nightmare()
  .goto(baseURL)
  .evaluate(function(innertag) {
    return document.querySelector(innertag).className;
  }, function(className) {
    className.should.equal(expected);
    callback();
  }, tag)
  .run();

但这种风格很差。在这种情况下,如果可能的话,我会使用中间变量来使分配更容易阅读。

答案 2 :(得分: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()

答案 3 :(得分: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()