如何从多个打印语句中输出单个打印语句并将其余部分重定向到 python 中的 null

How to output a single print statement out of many and redirect the rest to null in python

我有一个文件,里面有 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. # 单行注释,这是最好的方法,但是如果我注释 12 行,那么方法就会中断。

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

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

Try it online!

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