首页 > 解决方案 > 如何从许多中输出单个打印语句并将其余的重定向到python中的null

问题描述

我有一个文件,里面有 3 个打印语句,都是必需的。像这样的东西,

def method1(n: int, m: int, matrix: list) -> list:
    for i in range(m):
        if i % 2 == 0:
            for j in range(n):
                print(str(matrix[i][j]), end=" ") # <-- 1
        else:
            for j in range(n - 1, -1, -1):
                print(str(matrix[i][j]), end=" ") # <-- 2


if __name__ == "__main__":
    from timeit import timeit

    matrix = [[10, 20, 30, 40], [15, 15, 25, 55], [17, 19, 17, 18], [1, 8, 9, 2]]
    print(timeit(lambda: method1(4, 4, matrix), number=10000))  # <-- 3

现在我在一个大型项目中有类似的文件,我想检查每个方法运行所需的时间,因此只3需要并且不需要休息,但是如果我运行目录print语句中的所有文件,例如12创建一个大量的混乱与print来自其他文件的类似冗余语句相结合。

我尝试了什么?

  1. return尽可能地声明,但是假设有一些方法会遇到类似的声明,
if something:
   print(ans)
   ans += 1

在哪里交换printreturn行不通的。

  1. yield函数,它创建了一个生成器函数,它基本上可以工作,但它会篡改timeit模块的结果

  2. #单行评论,这是最好的方法,但是如果我评论这些行1然后2方法就会中断。

  3. 编写一个函数,将输出重定向到 null 并print通过它传递每个文件的不必要语句。

标签: pythonstdouttimeit

解决方案


也许设置sys.stdout/dev/null期间timeit

在线尝试!

if __name__ == "__main__":
    from timeit import timeit
    import sys

    matrix = [[10, 20, 30, 40], [15, 15, 25, 55], [17, 19, 17, 18], [1, 8, 9, 2]]
    stdout = sys.stdout
    with open('/dev/null', 'w') as sys.stdout:
        t = timeit(lambda: method1(4, 4, matrix), number=10000)
    sys.stdout = stdout
    print(t)  # <-- 3

推荐阅读