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 的转换工具将用 eval(input())
替换对 input()
的调用,用 input()
替换对 raw_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
上次修改时间:2023年9月9日17:39:29 GMT