【问题标题】:Is Python's range() function a overloaded built-in function? [duplicate]Python 的 range() 函数是重载的内置函数吗? [复制]
【发布时间】:2021-01-20 21:32:45
【问题描述】:

我发现只有参数列表末尾的参数可以具有默认值,因为 VALUES 是按函数中的位置分配的,如下面定义的那样

def greeting(a,b=7):
    pass

不是

def greeting(a=4,b):
    pass

我对内置 range() 函数的疑问是我们可以按如下方式传递参数

range(start_value, stop_value, increment_value)

调用函数时并不需要所有参数,所以range() 函数是重载函数,还是定义中有默认参数?

【问题讨论】:

  • 如果想实现类似的功能,请参考class - Python function overloading - Stack Overflow
  • 但是对于“它是如何实现的”,...我认为实现是用 C 语言实现的(你为什么想知道呢?)
  • 你的问题不清楚,range() 确实有可选参数。不清楚如何使用?或者不清楚您将如何自己编写这样的函数?请具体。
  • @Grismar,我知道使用 range() 函数,但我没有编写类似的函数。我的疑问是是否有可选参数,那么它应该只在最后而不是在第一个右边(我问的是内置 range() 函数中的 start_value 。
  • 所以你问range() 函数如何处理可选的起始值?为什么你需要知道?如果你想写一个类似的函数,问一个直接的问题。如果您只是好奇,请查看源代码。如果不明白怎么用,举个使用例子吧。

标签: python range default-parameters


【解决方案1】:

range 获取三个参数并检查参数计数然后返回生成的可迭代对象

如果你想做类似的事情,所以你应该用 *args 替换所有参数,然后像下面那样做

def range_(*args):
    start = 0
    end = 0
    step = 0
    # args is a list of arguments
    if len(args) == 1:
        end = args[0]
    elif len(args) == 2:
        start, end = args
    elif len(args) == 3:
        start, end, step = args
    else:
        print("the function gets maximum three arguments")
    # calculating something with start, end, step
    # and return result

P。 S。 如果你想用默认参数定义函数,那么默认参数应该在其他人之前定义

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 2012-05-27
    相关资源
    最近更新 更多