多任务与多个赋值用例在python中

时间:2017-09-05 10:47:00

标签: python

如果我想分配2个值,那么分配它是否会更加pythonic:

speed, acceleration = 10, 9.8

或只使用普通

speed = 10
acceleration = 9.8

我知道两者不相同,并且在第一个版本中所有表达式都在赋值之前进行了评估,因此在这种区别影响结果的情况下使用第一个变量是有意义的。 (例如,交换值a,b=b,a非常棒)。

如果两个变体之间的选择没有改变结果,你何时仍然会使用多重赋值,何时你会认为多个赋值更符合python的精神?

3 个答案:

答案 0 :(得分:2)

与大多数此类问题一样,这些都与可读性可变性有关。

在自己的行上分配每个变量通常在可变性方面得分较高,但在少数情况下,多项任务通过通过邻近关系传达关系,使理解变得更容易(在我看来)。

例如:

coords = (18, 32)
x, y = coords

或:

string = "I am a big string."
a, b, c = string[:7], string[7:11], string[11:]

但是,当然,这一切都是情境性的,如果您有疑问,我会在每行一项任务方面犯错,因为以后更容易改变。

编辑:我忘了一个主要原因,即每行不进行多次分配,最近我遇到了问题,所以我想我会更新答案。

如果在具有多个赋值的行上发生错误,则更难调试。有时您可以使用复杂的列表推导和多个函数调用将值分配给多个变量,这只是额外的工作来分隔行并再次调试以找出问题发生的位置。

个人作业的

+1。

答案 1 :(得分:2)

我认为这主要是基于意见的",但如果没有特殊原因可以使用多个分配(例如交换示例或返回值解包),我会坚持简单因为:

  • 很难错过任务。
  • 对于来自其他语言的人来说,阅读更容易(不那么令人惊讶或困惑)。
  • 虽然对于一些变量可能没问题,但它并没有真正进一步扩展。在大多数情况下,三个肯定是太多了。因此,您的代码约定必须类似于"如果您有多个变量,则在一行中分配变量,如果您有更多"或者#34;成对分配变量,则在一行中分配变量#34 ; (?)。
  • 更改其中一个变量的值并不会影响其他变量的行(从源控制的角度来看,这可以看作是正面的。)

也就是说,有些情况下我认为多项任务可能会更好。这是相当主观的,但如果我认为这些价值观密切相关(即没有另一个价值观没有意义),那么我可能会将它们排成一行。示例包括范围中的最小值和最大值或三个坐标的集合。有一些不太明确的情况,比如多项式中的"系数" (它们紧密相关,但它们的意义和关系不那么直观)或者你自己的速度和加速度的例子,它们也非常相关,但仍然有自己的意义。也许,我的潜意识经验法则是,如果我觉得它们属于同一个tuplenamedtuple,我可以将它们组合在一起。

答案 2 :(得分:0)

交换价值是一个非常有说服力的理由。 但是对于简单的价值分配,我会采取第二种方式。 它更容易阅读(图像,如果你有10个变量)。

此外,更容易更改。 (再次,如果您有10个变量,现在需要更改第6个变量的值)。

同样从编辑角度来看,编辑每一行比尝试使用其值...

查找变量要容易得多