📜  Python输入和C++, Java速度对比

📅  最后修改于: 2020-01-13 05:17:06             🧑  作者: 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只是一个薄包装器。

# 输出和输出的基础方法
# 输入N
n = int(raw_input())
# 输入array
arr = [int(x) for x in raw_input().split()]
# 初始化变量
summation = 0
# 计算总和
for x in arr:
    summation += x
# 打印结果
print(summation)

使用内置的stdin,stdout的方法要快一些:(Python 2.7)
1. 另一方面,sys.stdinFile 对象,在这种情况下,文件将是标准输入缓冲区。
2. stdout.write(‘D \ n’)print ‘D’快。
3.更快的方法是通过stdout.write(“”.join(list-comprehension))一次写入所有内容,但这使内存使用量取决于输入的大小。

# 倒入inbuilt standard input output
from sys import stdin, stdout
# 构建一个main()的函数
def main():
    # 通过readline方法获得输入
    n = stdin.readline()
    # 获得array input
    arr = [int(x) for x in stdin.readline().split()]
    # 初始化变量
    summation = 0
    # 计算总和
    for x in arr:
        summation += x
    # 也可使用内置方法 summation = sum(arr)
    # 通过write打印答案
    stdout.write(str(summation))
# 调用main方法
if __name__ == "__main__":
    main()

时间差:

Timing summary (100k lines each)
——————————–
Print : 6.040 s
Write to file : 0.122 s
Print with Stdout : 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
# 一个使用in-memory bytes缓冲实现的流方法
# 它继承了BufferedIOBase
buffer = io.BytesIO()
sys.stdout = buffer
# 打印
@atexit.register
def write():
    sys.__stdout__.write(buffer.getvalue())
#####################################
# 模版结束
# 常规方法
# 输入N个量
n = int(raw_input())
# 处理输入量
arr = [int(x) for x in raw_input().split()]
# 初始化变量
summation = 0
# 计算总和
for x in 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()即可