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

Python 增强提案

PEP 3111 – Python 3000 中内置的简单输入

作者:
Andre Roberge <andre.roberge at gmail.com>
状态:
最终版
类型:
标准跟踪
创建日期:
2006年9月13日
Python 版本:
3.0
发布历史:
2006年12月22日

目录

摘要

输入和输出是计算机程序的核心功能。目前,Python 通过 print 关键字提供简单的输出方式,并通过 input() 和 raw_input() 内置函数提供两种简单的交互式输入方式。

Python 3.0 将引入与以前 Python 版本不兼容的各种更改(PEP 3100)。在提议的更改中,print 将成为一个内置函数 print(),而 input() 和 raw_input() 将从内置命名空间中完全删除,即使是最基本的输入功能也需要导入某个模块来提供。

本 PEP 提议 Python 3.0 在内置命名空间中保留一些简单的交互式用户输入功能,等同于 raw_input()。

它于2006年12月被 BDFL 接受 [5]

动机

Python 易于阅读且支持多种编程风格(例如过程式、面向对象等),因此它可能是入门编程课程中使用的最佳计算机语言。简单的程序通常需要向用户提供信息(输出)并从用户获取信息(交互式输入)。任何旨在用于教育环境的计算机语言都应为输出和交互式输入提供直接的方法。

当前对 Python 3.0 的提案包括通过名为 print() 的内置函数提供一个简单的输出途径,但输入方法更为复杂 [例如通过 sys.stdin.readline()],这需要导入外部模块。当前版本的 Python (3.0 之前) 将 raw_input() 作为内置函数。有了这样的函数,需要简单输入/输出的程序可以从第一天开始编写,而无需讨论导入模块、流等。

基本原理

当前的内置函数,如 input() 和 raw_input(),在传统教学环境中被发现非常有用。(有关更多详细信息,请参阅[2]以及随后的讨论。)尽管 BDFL 明确指出[3] input() 将不会保留在 Python 3000 中,但他同时也表示他不反对修改关于取消 raw_input() 的决定。

raw_input() 提供了一种简单的方法来提问并从用户那里获取响应。Python 3.0 的拟议计划将要求用更复杂的语句替换单行语句

name = raw_input("What is your name?")

通过更复杂的

import sys
print("What is your name?")
same = sys.stdin.readline()

然而,从许多 Python 初学者和教育者的角度来看,使用 sys.stdin.readline() 存在以下问题:

1. 与名称“raw_input”相比,名称“sys.stdin.readline()”笨拙且不雅。

2. 名称“sys”和“stdin”对于大多数初学者来说没有意义,他们主要关心的是函数做了什么,而不是它在包结构中的位置。缺乏意义也使得它难以记住:是“sys.stdin.readline()”,还是“stdin.sys.readline()”?对于编程新手来说,没有明显的理由偏爱其中一个。相比之下,像 print、input、raw_input 和 open 这样简单直接的函数名称更容易记住。

3. “.”符号的使用对于许多初学者来说没有动机且令人困惑。例如,它可能会导致一些初学者认为“.”是可以在任何标识符中使用的标准字符。

4. 与 print 函数存在不对称性:为什么 print 不称为 sys.stdout.print()?

规范

现有的 raw_input() 函数将重命名为 input()

Python 2 到 3 的转换工具将把对 input() 的调用替换为 eval(input()),并将对 raw_input() 的调用替换为 input()

命名讨论

随着 input() 实际上从语言中移除,名称 raw_input() 变得不那么有意义,应考虑替代方案。各种论坛中提到的可能性包括

ask()
ask_user()
get_string()
input()  # initially rejected by BDFL, later accepted
prompt()
read()
user_input()
get_response()

虽然最初被 BDFL 拒绝,但有人建议最直接的解决方案是在 Python 3000 中将“raw_input”重命名为“input”。主要反对意见是 Python 2.x 已经有一个名为“input”的函数,而且,尽管它不会包含在 Python 3000 中,但拥有一个同名但语义不同的内置函数可能会让从 2.x 迁移到 3000 的程序员感到困惑。当然,这对初学者来说不是问题,对于经验丰富的程序员来说,问题的范围尚不清楚,因为 raw_input() 虽然受到许多人的欢迎,但并非普遍使用。在这种情况下,它对初学者的好处可以被认为超过了它对经验丰富的程序员造成的损害——尽管它可能会对阅读旧书籍或教程的人造成困惑。

接受重命名的理由可以在这里找到 [4]

参考资料


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

最后修改:2025-02-01 08:59:27 GMT