Python input()和sys.stdin之间有什么区别?

Python input()和sys.stdin之间有什么区别?,python,input,sys,Python,Input,Sys,我是python新手,正在网上尝试一些编码问题。我经常遇到sys.sdn接受输入。我想知道input()和sys.stdin在操作上有什么不同?以下是一些让您开始学习的内容: 内置函数input从标准输入流中读取一行输入,可以选择使用消息提示。但是,请注意提示,因为以下结果: result = input('Do you want to do whatever? ') ## doesn't work how you'd expect if result.lower() in ('y', 'ye

我是python新手,正在网上尝试一些编码问题。我经常遇到sys.sdn接受输入。我想知道
input()
sys.stdin
在操作上有什么不同?

以下是一些让您开始学习的内容:

内置函数
input
从标准输入流中读取一行输入,可以选择使用消息提示。但是,请注意提示,因为以下结果:

result = input('Do you want to do whatever? ')  ## doesn't work how you'd expect
if result.lower() in ('y', 'ye', 'yes', 'yup', 'ya'):
    do_whatever()
    ...
else:
    do_something_else()
    ...
..也将包括提示字符串(因此永远不会等于'y'/'yes'/等)。在我看来,最好先打印提示字符串,然后调用不带参数的输入,如下所示:

print('Do you want to do whatever?')
result = input()  ## notice that there is no prompt string passed to input()
if result.lower() in ('y', 'ye', 'yes', 'yup', 'ya'):
    do_whatever()
    ...
else:
    do_something_else()
    ...
综上所述,内置函数
input
从标准输入流(
sys.stdin
)读取输入,而内置函数
print
将输出打印到标准输出流(
sys.stdout
)。还有第三个错误流,标准错误流(
sys.stderr
),未处理的异常会被打印到其中

通常,你不必太担心它。只是在构建IDE和框架之类的东西时。

通过代码示例进行说明 我一直在问自己同样的问题,所以我提出了以下两个片段,通过模拟后者与前者,阐明了
sys.stdin
input()
的区别:

导入系统 定义我的_输入(提示=“”): 打印(提示,结束=“”)#不换行提示 对于sys.stdin中的行: 如果“\n”在第行:#我们只想读第一行并停在那里 打破 返回行.rstrip('\n') 以下是一个更精简的版本:

导入系统 定义我的_输入(提示=“”): 打印(提示,结束=“”) 返回sys.stdin.readline().rstrip('\n') 这两个代码段与
input()
函数的不同之处在于它们不检测文件的结尾(见下文)

通过文件澄清 以下是官方文件对功能的描述:

输入([提示])

如果存在prompt参数,则将其写入标准输出,而不带尾随换行符。然后,函数从输入中读取一行,将其转换为字符串(去掉尾随的换行符),并返回该字符串。读取EOF时,EOFError升高

下面是如何描述的:

系统stdin

解释器用于标准输入的文件对象。
stdin用于所有交互式输入(包括对input()的调用)
这些流(sys.stdin、sys.stdout和sys.stderr)是常规文本文件,类似于open()函数返回的文本文件。[……]

因此,
input()
是一个函数,
sys.stdin
是一个对象(文件对象)。 因此,它有许多属性,您可以在解释器中使用以下属性进行探索:

目录(sys.stdin) [“块大小”, "类",, "德尔",, "德拉特",, "dict",, "迪尔",, ... “截断”, “可写”, “写”, “把你写下来”, “writelines”] 并且可以单独显示,例如:

>sys.stdin.mode
R
它还有一些方法,如
readline()
,这些方法“从文件中读取一行;换行符(\n)保留在字符串的末尾,只有在文件没有换行结束时,才会在文件的最后一行忽略。这使得返回值明确无误;如果f.readline()返回一个空字符串,表示已到达文件结尾,而空行由“\n”表示,该字符串仅包含一个换行符。“()

全面实施 最后一个方法允许我们完全模拟input()函数,包括其EOF异常错误:

def my_输入(提示符=“”):
打印(提示,结束=“”)
line=sys.stdin.readline()
如果line='':#readline()仅在达到EOF时返回空字符串
提高EOF(读线时EOF)
其他:
返回行.rstrip('\n')

文档中有什么不清楚的地方?sys.stdin和input()之间的区别显然有很多不同之处,因为它们是两个完全不同的东西,你只需看一眼文档,而不必说任何关于实际阅读的内容。因此,与其重复你的极其模糊的问题(是的,我们可以阅读),不如更准确地解释一下你觉得困惑的是什么。这个问题很有趣。本课程旨在了解
input()
sys.stdin
之间的完全区别,它们之间的区别,以及为什么在不同的编程竞赛(如Codingame、HackerRank、,Battle Dev.文档中肯定没有提到这一点,我也希望看到澄清。“还将包括提示字符串”-1。这并不是对你的答案投反对票。只是这个答案不正确。提示永远不会包含在函数
input()
返回的内容中。