【问题标题】:How does a loop on range function with 0 as input works? [duplicate]以 0 为输入的范围函数循环如何工作? [复制]
【发布时间】:2020-12-27 11:09:32
【问题描述】:
def power(num, x=1):
    result = 1
    for i in range(x):
        result = result * num
    return result    

如果指数x 为零(例如power(2, 0)),我无法理解power 如何输出1

换句话说,range(0) 的循环是如何工作的?

【问题讨论】:

标签: python range


【解决方案1】:

让我们首先了解range 的实际作用。 range,在其最基本的版本中,将单个整数作为其参数(在您的情况下,x)。它给出了一个整数列表(在 Python 2 中)作为输出(英文中的 list 与 python 中的 list 几乎相同,但我不在这里详细介绍)。该列表包含从 0 到参数的数字,包括 0 和排除参数。

所以,range(5) 给了[0, 1, 2, 3, 4]

现在,您的循环实际上变成了:

for i in [0, 1, 2, 3, ..., x]:

x 为 0 时,列表也不能包含 0。所以你得到以下结果:

for i in []

由于i 没有可以采用的值,因此循环不会运行!

由于您在循环之前定义了result = 1,如果循环没有执行,return result 只会吐出相同的值。

在 Python 3 中,range() 函数提供了一个 generator 对象,类似于 Python 2 中的 xrange() 函数。

【讨论】:

  • range 在 Python 2 中只返回一个列表...
  • 我不认为在此处添加生成器会有所帮助。但我会改写我的答案。
  • 所以您认为提供错误信息有帮助吗?
【解决方案2】:

对于输入 power(2,0),您将 x 的默认值覆盖为 0。

现在,在函数内部,您已将 result = 1 定义为初始值。

当您进入下一条指令时,即for i in range(x)x=0,因此此函数将返回一个对象,其序列从 0 开始(包括)到结束(不包括)0,增量(步长)为 1,即它会创建一个空结果 (list(range(0)) = [].

因此,当您对其进行迭代时,它将退出 for 循环,并且不会对 result 变量进行任何操作。所以result 保持它的默认值,当你调用power(2,0) 时你得到1 作为返回结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多