如果 x > y,range(x, y) 的输出是什么?
What would be the output of range(x, y) if x > y?
设x
和y
为两个整数:
如果 x > y
在 Python 中被考虑,range(x, y)
会如何?
我尝试了以下代码:
for i in range(10, 3):
print(i)
我认为 range(10, 3)
应该被视为列表 [0, 3, 6, 9]
,但是这部分代码没有渲染任何东西。
range
的签名是
range(start, stop[, step])
range(10, 3)
将 start 和 stop 分别设置为 10 和 3,因此如果您要提供 step 参数,您需要提供 start 参数:
In [1]: range(0, 10, 3) # list(range(0, 10, 3)) in Python3+
Out[1]: [0, 3, 6, 9]
步骤的默认值为 1 并且(引用我之前链接的文档页面)
For a positive step, the contents of a range r are determined by the formula r[i] = start + step*i where i >= 0 and r[i] < stop.
range(10, 3)
是空的,因为 r[i] < stop 从一开始就是假的 (r[0]是 10 + 1*0 = 10 并且 10 大于 3).
你有两个选择:
重新排列输入值,
range(0, 10, 3) # => (0, 3, 6, 9)
编写一个包装函数,为您重新排列它们:
def safe_range(a, b):
return range(0, max(a,b), min(a,b))
safe_range(3, 10) # => (0, 3, 6, 9)
编辑: 想了想,我明白了;你正在尝试做类似
的事情
range({start=0,} stop, step)
但是如果你只给出两个值,就无法区分它和
range(start, stop, {step=1})
为了解决这种歧义,Python 语法要求默认值参数只能出现在所有位置参数之后 - 也就是说,第二个示例有效 Python,第一个无效。
range()
只有两个参数将这些参数解释为 start
和 stop
。来自 range()
function documentation:
range(stop)
range(start, stop[, step])
请注意,[, step]
在第二种形式中是可选的。通过提供小于或等于 start
的 stop
而将 step
保留为默认值 1
,您创建了一个空范围。该文档明确将此案例作为给出的示例之一:
>>> range(1, 0)
[]
Python 3 version of the documentation 更明确一点:
A range object will be empty if r[0]
does not meet the value constraint.
如果您想提供一个 step
值,您 必须 指定开始:
for i in range(0, 10, 3):
Python这里拒绝猜测;对 start
和 stop
参数使用变量都有合法用途,其中给定算法的某些运行,停止值最终等于或低于开始值;在这种情况下,这样的代码 期望 range()
为空。
设x
和y
为两个整数:
如果 x > y
在 Python 中被考虑,range(x, y)
会如何?
我尝试了以下代码:
for i in range(10, 3):
print(i)
我认为 range(10, 3)
应该被视为列表 [0, 3, 6, 9]
,但是这部分代码没有渲染任何东西。
range
的签名是
range(start, stop[, step])
range(10, 3)
将 start 和 stop 分别设置为 10 和 3,因此如果您要提供 step 参数,您需要提供 start 参数:
In [1]: range(0, 10, 3) # list(range(0, 10, 3)) in Python3+
Out[1]: [0, 3, 6, 9]
步骤的默认值为 1 并且(引用我之前链接的文档页面)
For a positive step, the contents of a range r are determined by the formula r[i] = start + step*i where i >= 0 and r[i] < stop.
range(10, 3)
是空的,因为 r[i] < stop 从一开始就是假的 (r[0]是 10 + 1*0 = 10 并且 10 大于 3).
你有两个选择:
重新排列输入值,
range(0, 10, 3) # => (0, 3, 6, 9)
编写一个包装函数,为您重新排列它们:
def safe_range(a, b): return range(0, max(a,b), min(a,b)) safe_range(3, 10) # => (0, 3, 6, 9)
编辑: 想了想,我明白了;你正在尝试做类似
的事情range({start=0,} stop, step)
但是如果你只给出两个值,就无法区分它和
range(start, stop, {step=1})
为了解决这种歧义,Python 语法要求默认值参数只能出现在所有位置参数之后 - 也就是说,第二个示例有效 Python,第一个无效。
range()
只有两个参数将这些参数解释为 start
和 stop
。来自 range()
function documentation:
range(stop)
range(start, stop[, step])
请注意,[, step]
在第二种形式中是可选的。通过提供小于或等于 start
的 stop
而将 step
保留为默认值 1
,您创建了一个空范围。该文档明确将此案例作为给出的示例之一:
>>> range(1, 0)
[]
Python 3 version of the documentation 更明确一点:
A range object will be empty if
r[0]
does not meet the value constraint.
如果您想提供一个 step
值,您 必须 指定开始:
for i in range(0, 10, 3):
Python这里拒绝猜测;对 start
和 stop
参数使用变量都有合法用途,其中给定算法的某些运行,停止值最终等于或低于开始值;在这种情况下,这样的代码 期望 range()
为空。