gpt4 book ai didi

python-3.x - 意外的元组解包,可能的范围问题/混淆

转载 作者:行者123 更新时间:2023-12-03 16:53:49 26 4
gpt4 key购买 nike

我正在使用 python 3.6。

我对第 09 行和第 10 行中的解包感到非常困惑。我希望 dy_outer在第 09 行等于 (0, -1) 和 dy_inner在第 09 行等于 (side-1, 0)。同样,我希望 dx_outerdx_inner在第 10 行分别等于 (0, -1) 和 (side-1, 0)。

但是,当 set_trace 关闭时,我看到的是 dy_outer 的值和 dy_inner从第 09 行开始分别等于 0 和 -1。 dx_outer也是如此和 dx_inner从第 10 行开始;它们也分别等于 0 和 -1。
offsets是一个元组元组,所以当你迭代它时,它应该解包每个元组,而不是第一个元组中的每个元素。

我对 Python 范围的直觉不正确吗?

01 def cover(board, lab = 1, top = 0, left =0, side = None):
02 if side is None:
03 side = len(board)
04
05 s = side // 2
06
07 offsets = (0, -1), (side-1, 0)
08
09 for dy_outer, dy_inner in offsets:
10 for dx_outer, dx_inner in offsets:
11 set_trace()
12 if not board[top+dy_outer][left+dx_outer]:
13 board[top + s + dy_inner][left+s+dx_inner] = lab
14 lab += 1
15 if s > 1:
16 for dy in [0,s]:
17 for dx in [0, s]:
18 lab = cover(board, lab, top+dy, left+dx, s)
19 return lab

最佳答案

谜底分为三部分。首先,offsets 结构体是一个二维数组:

((0, -1),
(side-1, 0))

第二部分是 for 循环只会在行上循环:
>>> for row in offsets:
print(row)

(0, -1)
(18, 0)

第三部分是解包只是解包给定行上的列:
>>> for column_zero, column_one in offsets:
print('Column 0:', column_zero)
print('Column 1:', column_one)
print()

Column 0: 0
Column 1: -1

Column 0: 18
Column 1: 0

把这些碎片放在一起表明你的直觉是正确的:
print('dy_o', 'dy_i', 'dx_o', 'dx_i', sep='\t\t')
print('----', '----', '----', '----', sep='\t\t')
for dy_outer, dy_inner in offsets:
for dx_outer, dx_inner in offsets:
print(dy_outer, dy_inner, dx_outer, dx_inner, sep='\t\t')

给出预期的输出:
dy_o            dy_i            dx_o            dx_i
---- ---- ---- ----
0 -1 0 -1
0 -1 18 0
18 0 0 -1
18 0 18 0

希望这能解开谜团,解开谜团:-)

关于python-3.x - 意外的元组解包,可能的范围问题/混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54800639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com