【问题标题】:Reading a line from standard input in Python从 Python 中的标准输入读取一行
【发布时间】:2011-10-21 10:13:17
【问题描述】:

以下两种从标准输入读取一行的方法有什么区别(如果有):raw_input()sys.stdin.readline()?在哪些情况下,这些方法中的一种比另一种更可取?

【问题讨论】:

    标签: python input language-features


    【解决方案1】:

    raw_input() 采用可选的prompt 参数。它还会从返回的字符串中去除尾随的换行符,并在加载了 readline 模块时支持历史功能。

    readline() 采用可选的size 参数,不去除尾随换行符,也不支持任何历史记录。

    由于它们不做相同的事情,因此它们并不是真正可以互换的。我个人更喜欢使用raw_input() 获取用户输入,使用readline() 从文件中读取行。

    【讨论】:

    • 另外,sys.stdin.readline() 可用于读取通过像program | my_app.py 这样的管道传递给程序的数据(事实上,这是我唯一使用sys.stdin 的东西),这是无法做到的raw_input()。对我来说,sys.stdin 用于读取从管道传递的数据,raw_input() 用于在程序执行期间提示输入数据。
    • 这对我来说似乎不是真的。在 Python 2.7 中,raw_input() 从管道中读取第一行,但不是全部。
    • 不是“我个人更喜欢使用 raw_input() 来获取用户输入,而 readline() 从文件中读取行”与“他们不是真的可互换”,因为它只显示了偏好问题而不是真正的特征分离?!
    • @Niccolò,我的意思是,虽然理论上可以使用readline() 来获取用户输入,但我自己避免这样做。我在前两段中列出了这两个函数之间的区别。
    【解决方案2】:

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

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

    2. 对于大多数初学者来说,“sys”和“stdin”这两个名称没有任何意义,他们主要关心的是函数的作用,而不是它在包结构中的位置。缺乏意义也让人难以记忆:是“sys.stdin.readline()”,还是“stdin.sys.readline()”?对于编程新手来说,没有任何明显的理由偏爱其中一个。相比之下,print、input 和 raw_input 和 open 等简单直接的函数名称更容易记住。”来自此处:http://www.python.org/dev/peps/pep-3111/

    【讨论】:

      最近更新 更多