函数中打开/关闭print()的智能方式

时间:2018-09-06 11:26:20

标签: python

如果function()有参数use_standard_output = True,我想使用标准输出。

赞:

def function(use_standard_output = True):

    ~ SOME PROCESS ~

    if(use_standard_output):
        print("print something to monitor the process")

是否有更聪明的方法来实现? 谢谢。

3 个答案:

答案 0 :(得分:3)

查看logging模块。它配备了不同的级别。

例如,您可以将对print的呼叫替换为logging.info("Print something to monitor the process")

如果使用logging.basicConfig(level=logging.INFO)进行配置,则会看到输出。如果您提高日志记录级别(例如logging.basicConfig(level=logging.WARNING),它将被忽略。

有关完整示例:

import logging
def function():
    logging.info("print something to monitor the process")

logging.basicConfig(level=logging.INFO)
function()
logging.basicConfig(leve=logging.WARNING)
function()

答案 1 :(得分:0)

无论它是否“智能”,您都可以重新定义打印功能。这就是在Python 3中使其成为函数的理由。由于您将“隐藏”内置函数(即在本地重新使用其名称,有效地重新定义了它),因此您必须保留一个引用到内置函数,以便您可以在重新定义中使用它。

然后,全局变量(此处为OUTPUT_REQUIRED)可以确定是否产生任何输出:

system_print = print

def print(*args, **kwargs):
    if OUTPUT_REQUIRED:
        system_print(*args, **kwargs)

您可能不熟悉*args, *kwargs表示法。在定义和调用中都将其用作代码,这是使用与调用system_print函数相同的位置和关键字参数来调用print的简单方法。

您可以继续使用附加参数,方法是在定义中明确命名它,而不将其传递给print

system_print = print

def print(OUTPUT_REQUIRED, *args, **kwargs):
    if OUTPUT_REQUIRED:
        system_print(*args, **kwargs)

这表示对API的更改,这会使切换回标准功能更加困难。在这种情况下,我建议只使用一个不同的名称。

日志记录模块虽然非常全面,但需要花费更多的精力来理解。

答案 2 :(得分:0)

如果要将消息写到终端或日志文件中,可以使用流。您只需使用指向文件或STDOUT的流对象即可。

public static String parent_names[]={
            "Ahmet Lola",
            "Hüseyin Kutlutürk",
            "Ümit Uğrak",
            "Veysel Karani",
            "Serkan Gotar",
            "Dündar Zalim",
            "Kadir Berkay",
            "Uğur Özdemir",
            "Bünyamin Akgün",
            "Kaptan Price",
            "Selim Tekiner",
            "Gökçe Yılan",
            "Talip Özkan",
            "Abdurrahman Tarikçi",
            "Selim Kirlier",
            "Hasan Can Doğan",
            "Erdem Gökşen",
            "Fatoş Ünal",
            "Nurgül Birtek",
            "Yuan Hui"};