当我需要从STDIN获取输入行时,我试图决定使用哪一行,所以我想知道在不同的情况下我需要如何 Select 它们.

我发现之前的一篇帖子(https://codereview.stackexchange.com/questions/23981/how-to-optimize-this-simple-python-program)说:

如何根据所用的时间和内存优化此代码?注意,我使用不同的函数来读取输入,如sys.斯特丁.readline()在读取字符串时是最快的,input()在读取整数时是最快的.

这句话是真的吗?

推荐答案

内置的inputsys.stdin.readline函数做的事情并不完全相同,哪一个更快可能取决于具体操作的细节.正如aruisdante comments 的那样,Python 3中的差异小于Python 2中的差异,而您提供的引用来自Python 2,但仍然存在一些差异.

第一个区别是,input有一个可选的提示参数,如果解释器以交互方式运行,则会显示该参数.这会导致一些开销,即使提示是空的(默认设置).另一方面,如果你真的想得到提示的话,它可能比在每次readline次通话前先打print次快.

下一个区别是,input从输入的末尾go 掉任何换行符.如果你无论如何都要脱掉它,那么让input人为你脱掉它可能比让sys.stdin.readline().strip()为你脱掉更快.

最后一个区别是如何指示输入的结束.如果没有更多的输入(stdin已在另一端关闭),input将在您调用它时引发EOFError.另一方面,sys.stdin.readline将在EOF返回一个空字符串,您需要知道这一点才能进行判断.

还有第三个选项,在sys.stdin上使用文件迭代协议.这很可能与拨打readline很相似,但逻辑上可能更好.

我怀疑,虽然您的各种选项之间可能存在性能差异,但它们可能比从磁盘读取文件(如果文件很大)并执行任何操作所需的时间成本都要小.我建议你避免过早优化的trap ,只做对你的问题最自然的事情,如果程序太慢("太慢"是非常主观的),你可以做一些分析,看看什么是最耗时的.不要花太多精力在不同的输入方式之间做出 Select ,除非这真的很重要.

Python-3.x相关问答推荐

Python ModuleNotFound错误,即使安装了模块

根据样本量随机 Select 组内样本

是否可以使用参数对Flask重定向?

Pandas 数据帧断言等同于NaN

Python多处理池:缺少一个进程

在Python中从列创建新行

将自定义函数应用于 pandas 数据框的每一列

tkinter/python3.9 中的 Entry 子类和用户输入重复的问题

在 python f-string 中使用 \u

以编程方式映射 uniprot ID 时如何解决 400 客户端错误?

Python BeautifulSoup:在 Select 语句中排除其他标签

Python rolling_corr 取消后,应该用什么方法来处理

解包时是否可以指定默认值?

运行 PyCharm 测试时如何解决django.core.exceptions.ImproperlyConfigured:找不到 GDAL 库?

cv2 python 没有 imread 成员

Python的max函数有多高效

在 Ubuntu 上为 Python3 安装 mod_wsgi

如何在 FastAPI 中的一条路由上捕获任意路径?

为现有项目创建virtualenv

在 Python 中生成马尔可夫转移矩阵