python - input() 和 sys.stdin 有什么区别?

标签 python input sys

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

最佳答案

通过代码示例进行说明

我一直在问自己同样的问题,所以我想出了这两个片段,通过模拟后者与前者:

import sys

def my_input(prompt=''):
  print(prompt, end='') # prompt with no newline
  for line in sys.stdin:
    if '\n' in line: # We want to read only the first line and stop there
      break
  return line.rstrip('\n')

这是一个更精简的版本:

import sys

def my_input(prompt=''):
  print(prompt, end='')
  return sys.stdin.readline().rstrip('\n')

这两个片段与 input() 函数的不同之处在于它们不检测文件结尾(见下文)。

通过文档澄清

官方文档是这样描述函数input()的:

input([prompt])

If the prompt argument is present, it is written to standard output without a trailing newline. The function then reads a line from input, converts it to a string (stripping a trailing newline), and returns that. When EOF is read, EOFError is raised.

这就是sys.stdin描述:

sys.stdin

File object used by the interpreter for standard input.
stdin is used for all interactive input (including calls to input());
These streams (sys.stdin, sys.stdout and sys.stderr) are regular text files like those returned by the open() function. [...]

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

> dir(sys.stdin)

['_CHUNK_SIZE',
 '__class__',
 '__del__',
 '__delattr__',
 '__dict__',
 '__dir__',

  ...

 'truncate',
 'writable',
 'write',
 'write_through',
 'writelines']

并且您可以单独显示,例如:

> sys.stdin.mode
r

它还有一些方法,比如readline(),它“从文件中读取一行;在字符串末尾留下一个换行符(\n),如果文件不以换行符结尾,并且仅在文件的最后一行被省略。这使得返回值明确;如果 f.readline() 返回空字符串,则已到达文件末尾,而空行由 '\n' 表示,这是一个仅包含单个换行符的字符串。"( 1 )

全面实现

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

def my_input(prompt=''):
  print(prompt, end='')
  line = sys.stdin.readline()
  if line == '': # readline() returns an empty string only if EOF has been reached
    raise EOFError('EOF when reading a line')
  else:
    return line.rstrip('\n')

关于python - input() 和 sys.stdin 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29527023/

相关文章:

python - 如何在python中用部分填充特定的位置参数?

python - 正则表达式没有得到所有数字

javascript - 如何获取选中的<input type ="checkbox"/>的值?

python - 在Python3中使用Script = argv

python - webdriver.get() 引发 TimeoutException

python - 如何使用正则表达式更改数据记录的顺序并将其放在一个数据框中?

c - 是否有任何函数可以从标准输入中获取无限输入字符串

C++ SDL 键盘响应

python - 根据特定列值将数据集拆分为两组行 [python,unix]

python - 通过 sys.argv 在 bio python 中输入字符串