我编写了一个类,试图重新创建默认的python range类,但我意识到初始化的行为与平常有所不同.

通常,函数的必需参数必须在默认参数f.e.之前:

def foo(a, b, c='bar'):
    return a, b, c

但是在range()的情况下,你可以这样使用它.其中stop是唯一必需的参数.所以基本上:

print(list(range(5)))
print(list(range(2, 6)))
print(list(range(0, 10, 2)))
>>[0, 1, 2, 3, 4]
>>[2, 3, 4, 5, 6]
>>[0, 2, 4, 6, 8]

这是否意味着有一种方法可以编写一个函数,使所需的参数不必是第一个参数?它是如何工作的?我如何才能重新创建它?

提前感谢!!!

推荐答案

当然有办法.如果没有其他方法,您可以这样做:

def foo(a, b = None, c = None ):
    if not b and not c:
        start = 0
        stop = a
        step = 1
    elif not c:
        start = a
        stop = b
        step = 1
    else:
        start = a
        stop = b
        step = c
    print(f"{start = }, {stop = }, {step = }")

foo(2)
foo(1,2)
foo(1,2,3)

Python相关问答推荐

连接两个具有不同标题的收件箱

根据在同一数据框中的查找向数据框添加值

从收件箱中的列中删除html格式

处理(潜在)不断增长的任务队列的并行/并行方法

scikit-learn导入无法导入名称METRIC_MAPPING64'

如何使用数组的最小条目拆分数组

当独立的网络调用不应该互相阻塞时,'

在Python argparse包中添加formatter_class MetavarTypeHelpFormatter时, - help不再工作""""

如何在Python中找到线性依赖mod 2

如何保持服务器发送的事件连接活动?

Python中的变量每次增加超过1

Pandas—堆栈多索引头,但不包括第一列

我对这个简单的异步者的例子有什么错误的理解吗?

无法在Spyder上的Pandas中将本地CSV转换为数据帧

使用python playwright从 Select 子菜单中 Select 值

如何在PythonPandas 中对同一个浮动列进行逐行划分?

Pythonquests.get(Url)返回Colab中的空内容

有没有一种方法可以在朗肯代理中集成向量嵌入

如果服务器设置为不侦听创建,则QWebSocket客户端不连接到QWebSocketServer;如果服务器稍后开始侦听,则不连接

普洛特利express 发布的人口普查数据失败