我有这个Python代码来生成素数。我添加了一小段代码(在# Start Progress code
和# End Progress Code
之间)来显示操作进度,但它减慢了操作速度。
#!/usr/bin/python
a = input("Enter a number: ")
f = open('data.log', 'w')
for x in range (2, a):
p = 1
# Start progress code
s = (float(x)/float(a))*100
print '\rProcessing ' + str(s) + '%',
# End progress code
for i in range(2, x-1):
c = x % i
if c == 0:
p = 0
break
if p != 0:
f.write(str(x) + ", ")
print '\rData written to \'data.log\'. Press Enter to exit...'
raw_input()
我的问题是如何在不减慢实际代码/循环速度的情况下显示操作的进度。提前致谢;-)
最佳答案
回答你的问题 I/O 非常昂贵,因此打印出你的进度将对性能产生巨大影响。如果可能的话我会避免打印。
如果您关心速度,可以使用一个非常好的优化来大大加速您的代码。
对于你的内部for循环,而不是
for i in range(2, x-1):
c = x % i
if c == 0:
p = 0
break
使用
for i in range(2, x-1**(1.0/2)):
c = x % i
if c == 0:
p = 0
break
您只需从 2 的范围迭代到您要进行素性测试的数字的平方根。
您可以使用此优化来抵消打印进度造成的任何性能损失。
关于Python 显示进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24209414/