Python中一行嵌套循环中的迭代顺序



考虑以下代码片段:

cur = 1176
allowed = {1, 3, 4, 9}
r = [digit in allowed for block in divmod(cur, 60) for digit in divmod(block, 10)]

以上返回[True, True, True, False]

我不明白第三行是干什么的。在我看来,它甚至不应该起作用,因为第一个divmod将返回一个2-元组,这将是第二个divmod的第一个参数,而这个内置不能接受这种类型的组合,例如

divmod(divmod(cur, 60), 10)
TypeError: unsupported operand type(s) for divmod(): 'tuple' and 'int'

这里发生了什么?

divmod(1176, 60)给我们(19, 36)。然后,这些按以下顺序传递到第二个divmod

  1. divmod(19, 10)给了我们(1, 9)
  2. divmod(36, 10)给了我们(3, 6)

然后检查新序列,看看它们是否在allowed:中

  1. 1 in {1, 3, 4, 9}=>真
  2. 9 in {1, 3, 4, 9}=>真
  3. 3 in {1, 3, 4, 9}=>真
  4. 6 in {1, 3, 4, 9}=>错误

所以得到的列表是[True, True, True, False]


实际操作顺序如下:

  1. divmod(1176, 60)给我们(19, 36)

    1. divmod(19, 10)为我们提供(1, 9)

      1. 1 in {1, 3, 4, 9}=>真
      2. 9 in {1, 3, 4, 9}=>真
    2. divmod(36, 10)给了我们(3, 6)

      1. 3 in {1, 3, 4, 9}=>真
      2. 6 in {1, 3, 4, 9}=>错误

相关内容

  • 没有找到相关文章

最新更新