python- modulo运算符理解

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (401)

我碰到了一些代码,它以我以前从未见过的方式使用模运算符。这条线是data_index = (data_index + 1) % len(data)

我不知道这段代码在更新时会尝试做什么data_index

def generate_batch(batch_size, num_skips, skip_window):
    global data_index
    assert batch_size % num_skips == 0
    assert num_skips <= 2 * skip_window
    batch = np.ndarray(shape=(batch_size), dtype=np.int32)
    labels = np.ndarray(shape=(batch_size, 1), dtype=np.int32)
    span = 2 * skip_window + 1 # [ skip_window target skip_window ]
    buffer = collections.deque(maxlen=span)
    for _ in range(span):
        buffer.append(data[data_index])

        # What is this doing?
        data_index = (data_index + 1) % len(data)
# ... More stuff ...
提问于
用户回答回答于

模运算符%具有明确定义的行为。它除以数后产生余数。它用于表达形式a % b,返回一个值c

该定义创建了一个有趣的属性,在您的问题提供的代码中使用,将值“包装”到明确定义的范围内。有问题的代码在循环中使用它来确保data_index包含在0to 的范围内len(data) - 1。当它超出界限时,它会继续data[data_index]从0开始追加。

以下是模数循环行为的示例:

for i in range(10):
    print(str(i) + ' % 3 =', i % 3)

哪个印刷品:

0 % 3 = 0
1 % 3 = 1
2 % 3 = 2
3 % 3 = 0
4 % 3 = 1
5 % 3 = 2
6 % 3 = 0
7 % 3 = 1
8 % 3 = 2
9 % 3 = 0

扫码关注云+社区

领取腾讯云代金券