Python 3.x Python 3:函数参数中的省略号?

Python 3.x Python 3:函数参数中的省略号?,python-3.x,aiohttp,Python 3.x,Aiohttp,我最近遇到了省略号(…),该省略号在函数的参数中使用,然后在该函数的主体中使用: def make_mocked_request(method, path, headers=None, *, match_info=sentinel, version=HttpVersion(1, 1), closing=False, app=None,

我最近遇到了省略号(
),该省略号在函数的参数中使用,然后在该函数的主体中使用:

def make_mocked_request(method, path, headers=None, *,
                        match_info=sentinel,
                        version=HttpVersion(1, 1), closing=False,
                        app=None,
                        writer=sentinel,
                        protocol=sentinel,
                        transport=sentinel,
                        payload=sentinel,
                        sslcontext=None,
                        client_max_size=1024**2,
                        loop=...):
    """Creates mocked web.Request testing purposes.

    Useful in unit tests, when spinning full web server is overkill or
    specific conditions and errors are hard to trigger.

    """

    task = mock.Mock()
    if loop is ...:
        loop = mock.Mock()
        loop.create_future.return_value = ()

你能解释一下python 3的这个新特性吗?

是python中的一个内置常量。在Python3中,它有一个文本语法
,因此它可以像任何其他文本一样使用。Python3接受了这一点,因为

您找到的代码(用作函数参数默认值)显然就是这样一种“可爱”的用法。在该代码的后面部分,您将看到:

if loop is ...:
    loop = mock.Mock()
    loop.create_future.return_value = ()
在这里,它只是一个哨兵,也可以是
object()
或其他任何东西-没有任何特定于
省略号的东西。也许通常的哨兵,
None
,在这种情况下还有其他一些特定的含义,尽管我在中看不到任何证据(似乎
None
也同样有效)

在野外有时会看到省略号文本的另一个用例是尚未编写的代码的占位符,类似于pass语句:

class Todo:
    ...

有关涉及扩展切片语法的更典型的用例,请参见

可能重复的感谢响应@wim!因此,我假设在这里使用省略号是一种“可爱”的方法来检查参数是否没有传递到函数的输入上(因此等于它的默认值,即省略号)。是的,就是这样。很抱歉,没有比这更有趣的了……)