gpt4 book ai didi

python - 我可以从对象本身获取用于构造 Python 2.7 xrange 的值吗?

转载 作者:太空狗 更新时间:2023-10-30 00:55:17 27 4
gpt4 key购买 nike

如果 s 是 Python 中的 slice 对象,使用 s = slice(start, stop, step) 或(在适当的上下文)start:stop:step,用于构造 s 的值可从 slice 对象本身作为 s.start s.stops.step

类似的 startstopstep 成员在 Python 3.4 中的 range 对象上可用 [ Issue9896 ].例如,range(1, 4, 2).start == 1

但是,Python 2.7 xrange 对象没有startstopstep 成员。有没有其他方法可以从对象本身获取用于构造 xrange 的值?

最佳答案

可以恢复原始的 startstep 参数,但不一定是原始的 stop 参数。

获取值的一种方法是查看 xrange 对象(通常用于酸洗):

>>> x = xrange(10)
>>> x.__reduce__()[1]
(0, 10, 1)
>>> y = xrange(2, 100, 13)
>>> y.__reduce__()[1]
(2, 106, 13)

然后 start, stop, step = y.__reduce__()[1] 会将三个变量名称分配给适当的整数。 startstep 值始终是用于构造 xrange 对象的原始值。

stop 可能比最初用于收缩对象的参数更高。对于任何 xrange 对象 x 它等于 x[-1] + step

通常,一旦创建了 xrange 对象,就不可能恢复原来的停止参数。如果你研究 source for xrange ,您会看到该对象不保留对特定停止值的引用,仅保留迭代器的起始值、步长值和总长度。当调用 str__reduce__ 时,对象将使用内部函数 get_stop_for_range 计算最新可能的停止值。

这与 Python 3 的 range 对象形成对比,后者确实记得原始的 stop value .

关于python - 我可以从对象本身获取用于构造 Python 2.7 xrange 的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29767700/

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