我正在使用python 3.6。
我对第9行和第10行的拆包感到非常困惑。我希望第09行的dy_outer
等于(0,-1),第09行的dy_inner
等于(side-1 ,0)。同样,我希望第10行上的dx_outer
和dx_inner
分别等于(0,-1)和(side-1,0)。
但是,当set_trace关闭时,我看到第09行的dy_outer
和dy_inner
的值分别等于0和-1。第10行的dx_outer
和dx_inner
也是如此;它们分别等于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
答案 0 :(得分:6)
这个谜分为三个部分。首先,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
希望这能揭开谜团中的谜团:-)