Timeit 模块拒绝 print("\n") 语句

问题描述

我正在尝试运行以下代码示例

from timeit import timeit as t 

setup = '''
import time
from multiprocessing import Pool

def square(x):
    square = x * x
    time.sleep(1)
    return square
'''
case01 = '''
def caso01(): 

    print("\nPART 1")
    
    starttime = time.time()
    pool = Pool(4)
    pool.map(square,range(0,5))
    pool.close()
    endtime1 = time.time()
    print(f"Time taken {endtime1-starttime} seconds")
    return None
'''
def main():
    print( t(setup=setup,stmt=case01,number=100) )
    return None
main()

我总是得到同样的错误

File "/usr/lib/python3.8/timeit.py",line 233,in timeit
  return Timer(stmt,setup,timer,globals).timeit(number)
File "/usr/lib/python3.8/timeit.py",line 122,in __init__
  compile(stmtprefix + stmt,dummy_src_name,"exec")
File "<timeit-src>",line 16
  print("

我发现从打印句中删除“\n”问题就消失了。在 Timeit 模块中根本无法使用 "\n" 吗?我错过了什么?

谢谢

PS:在 Linux 机器上使用 Python 3

解决方法

您需要添加前导反斜杠 (\) 来转义 \n,因为它是在运行时解码的。

case01 = '''
def caso01(): 

    print("\\nPART 1")
    
    starttime = time.time()
    pool = Pool(4)
    pool.map(square,range(0,5))
    pool.close()
    endtime1 = time.time()
    print(f"Time taken {endtime1-starttime} seconds")
    return None
'''