当前位置: 首页 > 面试题库 >

范围的奇怪论点

傅越
2023-03-14
问题内容

python3中的range函数采用三个参数。其中两个是可选的。因此参数列表如下所示:

[开始],停止,[步骤]

这意味着(如果我错了,请纠正我)在非可选参数之前有一个可选参数。但是,如果我尝试定义这样的函数,我会得到:

>>> def foo(a = 1, b, c = 2):
    print(a, b, c)
SyntaxError: non-default argument follows default argument

这是我作为“普通” python用户无法做的事情,还是可以某种方式定义这样的功能?我当然可以做类似的事情

def foo(a, b = None, c = 2):
    if not b:
        b = a
        a = 1

但是例如,帮助功能将显示奇怪的信息。所以我真的很想知道是否有可能定义一个诸如内置函数之类的函数range


问题答案:

range()接受1个位置参数和两个可选参数,并根据传入的参数的不同来不同地 解释 这些参数。

如果仅传递了 一个 参数,则假定它是该stop参数,否则,第一个参数将被解释为开始。

在现实中,range(),编码在C,采用可变数目的参数。您可以像这样模拟:

def foo(*params):
    if 3 < len(params) < 1:
        raise ValueError('foo takes 1 - 3 arguments')
    elif len(params) == 1
        b = params[0]
    elif:
        a, b = params[:2]
    c = params[2] if len(params) > 2 else 1

但您也可以交换参数:

def range(start, stop=None, step=1):
    if stop is None:
        start, stop = 0, start


 类似资料:
  • 问题内容: 我在es-discuss邮件列表中遇到了以下代码: 这产生 为什么这是代码的结果?这里发生了什么事? 问题答案: 了解此“ hack”需要了解几件事: 为什么我们不只是做 如何处理论点 如何处理多个参数 函数如何处理参数 是什么呢 它们是javascript中相当高级的主题,因此它的时间要长得多。我们将从顶部开始。系好安全带! 1.为什么不只是? 什么是数组,真的吗?包含整数键的常规对

  • 发现了一个非常有趣的问题,在调试后找到了重现它的场景。 因此,如果我有一个具有包范围B的类,它有一些公共方法和扩展它的公共类A: 然后在测试中: 你猜怎么着,我得到了我刚刚抛出的NullPointerException,所以Mockito以某种方式创建了一个“真实”的对象,并调用了一个真正的方法,而不是一个被嘲笑的方法。为什么会这样? 在上面的示例中,我在类<code>B<code>中更改了<co

  • 我有以下代码来解析一个JSON文件: 要处理以下JSON文件: 如果我执行此代码,我将收到以下错误: 所以我开始一步一步地调试应用程序,看看part processing()中的哪个代码部分抛出了这个异常。令人惊讶的是,那里的所有代码都正常执行:没有抛出异常,也没有返回结果I except。 更让我惊讶的是,当我稍微改变第一种方法的代码时,它可以在不产生异常的情况下工作。 我不知道println方

  • 问题内容: 我在GregorianCalendar类中遇到一个奇怪的行为,我想知道我是否真的做得不好。 仅当初始化日期的月份的实际Maximum大于我将日历设置为的月份时,才追加此值。 这是示例代码: 我知道问题是由于日历初始化日期是31天(可能是5月),与设置为2月(28天)的月份混淆了。修复很容易(只需在设置年和月之前将day_of_month设置为1),但是我想知道这确实是想要的行为。有什么

  • 问题内容: 我正在为一个问题而苦苦挣扎,我不明白为什么它不起作用。如何通过将变量传递并转换为? 为什么在顶部代码段中不起作用,但在行下方的底部代码段中起作用? 唯一的区别似乎是添加了一个额外的变量,该变量也被键入为? 问题答案: 该是一种原始类型,同时是一个普通的Java类。您不能在原始类型上调用方法。但是该方法在上可用,如javadoc中所示 有关这些原始类型的更多信息,请参见此处

  • 问题内容: 为什么的到哪里去了? 问题答案: 删除任何字符,并从字符串的开头和结尾。

  • 问题内容: 我正在使用此代码: 但是在编译时出现此错误: 然后是堆栈跟踪的编译器错误。 我将在课堂开始时同时进行这两种导入: 有什么事吗 在Netbeans中,我看到自动完成选项并且Locale对象没有语法错误… 问题答案: 您的设置有些麻烦,下面的程序对我来说很好用。 它要求源代码的事实使我相信它正在尝试以某种调试模式进行编译或运行。您不需要编译java.util。*的源代码,这很奇怪。 看看我

  • 问题内容: 我认为这是一个正常程序,但这是我得到的输出: 有人可以向我解释一下吗? 问题答案: 这是有据可查的PHP行为,请参阅php.net的foreach页面上的警告。 警告 即使在 foreach 循环之后,仍保留 $ value的 引用和最后一个数组元素。建议通过unset()销毁它。 __ 编辑 尝试逐步了解此处实际发生的情况