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

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的这个新特性吗?

推荐答案

Ellipsis是Python中的内置常量.在Python3中,它有一个文本语法...,所以它可以像其他任何文本一样使用.Guido接受了Python3,因为some folks thought it would be cute.

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

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

在这里,它只是被用作哨兵,也可能是object()或其他任何东西——没有特定于Ellipsis的东西.也许通常的哨兵None在这种情况下还有其他一些特定的含义,尽管我在the commit中看不到任何证据(似乎None也同样有效).

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

class Todo:
    ...

有关涉及扩展切片语法的更典型的用例,请参见What does the Python Ellipsis object do?

Python-3.x相关问答推荐

"安装serial vs安装psyserial header,"""

没有这样的命令';角色';-可靠分子

使用 NaN 计算 pct_change 时如何避免 bfill 或 ffill

安装没有 sudo 权限的 python3 和 pip3

如何使用`re.findall`从字符串中提取数据

位对的距离

如何在带有 GUI 的 python 游戏中设置回答时间限制?

python中两个连续的yield语句如何工作?

具有 2 个输入的 python 3 map/lambda 方法

如何从 Python 3.5 降级到 Python 3.4

如何使我的课程在 Python 中非常可打印?

使用 pytest.fixture 返回模拟对象的正确方法

用于 Django 应用程序的 Cython:它会工作吗?

如何将 cv2.imread 匹配到 keras image.img_load 输出

tkinter TclError:错误的文件类型使用 askopenfilename

如何在 FastAPI 中的一条路由上捕获任意路径?

从 csv 中删除单行而不复制文件

用 Anaconda 安装了一个包,无法在 Python 中导入

Django Rest 框架 ListField 和 DictField

如何从 Base64 转换为字符串 Python 3.2