Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python增强提案

PEP 221 – 使用 as 导入

作者:
Thomas Wouters <thomas at python.org>
状态:
最终
类型:
标准跟踪
创建:
2000年8月15日
Python版本:
2.0
更新历史:


目录

简介

本 PEP 描述了 Python 2.0 中的 import as 提案。本 PEP 跟踪此功能的状态和所有权。它包含对该功能的描述,并概述了支持该功能所需的更改。此文件的 CVS 修订历史记录包含权威的历史记录。

基本原理

本 PEP 提出扩展 Python 语法,涉及 importfrom <module> import 语句。这些语句加载模块,并将该模块绑定到本地名称,或将该模块中的对象绑定到本地名称。但是,有时希望将这些对象绑定到不同的名称,例如为了避免名称冲突。目前可以使用以下惯用法实现此目的

import os
real_os = os
del os

类似地,对于 from ... import 语句

from os import fdopen, exit, stat
os_fdopen = fdopen
os_stat = stat
del fdopen, stat

建议的语法更改将向这两个语句添加一个可选的 as 子句,如下所示

import os as real_os
from os import fdopen as os_fdopen, exit, stat as os_stat

as 名称不打算成为关键字,需要使用一些技巧来说服 CPython 解析器它不是关键字。但是,对于更高级的解析器/标记器,这应该不是问题。

导入子模块存在一个稍微特殊的案例。语句

import os.path

将模块 os 本地存储为 os,以便可以访问导入的子模块 path,方法是 os.path。因此,

import os.path as p

os.path(而不是 os)存储在 p 中。这使得它实际上与以下语句相同

from os import path as p

实现细节

本 PEP 已被接受,并且建议的代码更改已签入。补丁仍然可以在 SourceForge 补丁管理器中找到 [1]。目前,语法中使用了 NAME 字段,而不是裸字符串,以避免关键字问题。它引入了一个新的字节码 IMPORT_STAR,该字节码执行 from module import * 行为,并更改 IMPORT_FROM 字节码的行为,以便它将请求的名称(始终是单个名称)加载到堆栈上,随后由 STORE 操作码存储。因此,所有显式导入的名称现在都遵循 global 指令。

from module import * 的特殊情况仍然是一个特殊情况,因为它无法容纳 as 子句,并且不会生成任何 STORE 操作码;导入的对象直接加载到本地命名空间中。这也意味着以这种方式导入的名称始终是本地的,并且不遵循 global 指令。

还建议对此语法进行额外更改,以概括 as 子句后给出的表达式。它不仅可以是单个名称,还可以是任何产生有效左值的表达式;任何可以赋值给它的东西。适应此更改所需的更改是最小的,正如补丁 [2] 所证明的那样,由此产生的泛化允许许多新的结构,这些结构与其他 Python 赋值结构完全平行。但是,这个想法被 Guido 拒绝了,因为它“过度泛化”。

参考文献


来源: https://github.com/python/peps/blob/main/peps/pep-0221.rst

上次修改: 2023-09-09 17:39:29 GMT