📅  最后修改于: 2020-05-03 12:48:11             🧑  作者: Mango
Python是一种非常人性化的语言,唯一的缺点就是速度慢。 与C,C++和Java相比,它要慢得多。 在在线编码平台上,如果提供的C / C++限制为X。 通常,在Java中提供的时间是2X和Python,是5X 。
为了提高输入/输出密集型问题的代码执行速度,语言具有各种输入和输出过程。
一个示例问题:
考虑一个寻找从用户输入的N个数字之和的问题。
输入数字N。
输入N个数字,并在一行中用一个空格隔开。
例子:
输入:
5
1 2 3 4 5
输出:
15
针对上述问题的不同Python解决方案:
普通方法Python:(Python 2.7)
1. raw_input()采用可选的提示参数。 它还将从返回的字符串中删除结尾的换行符。
2. print只是一个薄包装器,用于格式化输入(末尾args和换行符之间的空间)并调用给定对象的write函数。
# 输入输出的基本方法
# 输入N
n = int ( raw_input ())
# 输入数组
arr = [ raw_input ().split()] x int (x) ().split()]
# 初始化变量
summation = 0
# 计算总和
for arr: x arr:
summation + = x
# 打印结果
print (summation)
使用内置的stdin,stdout的方法快一点:(
1,Python 2.7) 另一方面, sys.stdin是一个File Object 。 就像创建可以创建的其他文件对象以读取文件的输入一样。 在这种情况下,文件将是标准输入缓冲区。
2. stdout.write(‘D \ n’)比print‘D’快。
3.更快的方法是通过stdout.write(“”。join(list-comprehension))一次写入所有内容,但这使内存使用量取决于输入的大小。
# 导入内置标准输入输出
from sys import stdin, stdout
# 假设一个名为main()的函数和所有操作均已执行
def main():
# 通过readline方法输入
n = stdin.readline()
# 数组输入类似方法
arr = [ stdin.readline().split()] x int (x) stdin.readline().split()]
#初始化变量
summation = 0
# 计算总和
for arr: x arr:
summation + = x
# could use inbuilt summation = sum(arr)
# 打印结果
# write方法仅写入字符串操作,因此我们需要将任何数据转换为字符串以进行输入
stdout.write( str (summation))
# 调用main方法
if __name__ = = "__main__" :
main()
时间差:
时序摘要(每条10万行)
————————————
打印:6.040 s
写入文件:0.122 s
使用标准输出打印:0.121 s
添加缓冲管道io:(Python 2.7)
1.只需在提交代码之前添加缓冲的IO代码,以加快输出速度。
2. io.BytesIO对象的好处是它们实现了一个通用接口(通常称为“类文件”对象)。 BytesIO对象具有内部指针,并且每次调用read(n)时指针都会前进。
3. atexit模块提供了一个简单的接口来注册程序正常关闭时要调用的函数。 sys模块还提供了一个挂钩sys.exitfunc,但是只能在其中注册一个函数。 atexit注册表可以同时由多个模块和库使用。
# 模板开始
#####################################
# 导入库以进行通用输入/输出处理
import atexit, io, sys
# 使用内存中字节缓冲区的流实现。它继承了BufferedIOBase。
buffer = io.BytesIO()
sys.stdout = buffer
# 通过这里打印
@atexit .register
def write():
sys.__stdout__.write( buffer .getvalue())
#####################################
# 模板末端
# 遵循常规方法
# 输入N
n = int ( raw_input ())
# 输入数组
arr = [ raw_input ().split()] x int (x) ().split()]
# 初始化变量
summation = 0
# 计算总和
for arr: x arr:
summation + = x
# 打印结果
print (summation)
通常,在处理大量数据时,普通方法无法在时限内执行。 方法2帮助维护大量的I/O数据。 方法3是最快的。 通常,通过方法2和3帮助处理大于2或3 MB的输入数据文件。
注意:上面提到的代码在Python 2.7中,要在Python 3.X版本中使用。 只需使用Python 3.X的input()语法替换raw_input()即可 。 休息应该很好。