2013-10-09 4 views
-4
def F_1(): 
    print("Hello") 

def F_2(): 
    F_1() 

def F_3(): 
    F_1() 

Когда я вызываю функцию f_2 печатает «Hello» То же самое происходит, когда я вызываю функцию F_3 Мне нужно, чтобы остановить печать Здравствуйте, когда я звоню f_2 и печати Здравствуйте, когда я звоню F_3 Является ли это возможным?Изменить поведение функции в Python

Если кто-то может дать мне код

Thanx

ответ

1

Конечно, просто переопределяет F_2 так не вызывает F_1.

def F_2(): 
    pass 

Вы можете даже сделать это условно:

if something == otherthing: 
    def F_2(): 
     pass 

Если вы хотите продолжать звонить F_1 из F_2, а лишь подавляют выход бывших, используйте этот маленький контекст менеджер:

import sys 

class suppressing_output(object): 

    def __enter__(self): 
     self.stdout, sys.stdout = sys.stdout, self 
     return self 

    def __exit__(self, *args): 
     sys.stdout = self.stdout 

    def write(self, data): 
     pass 

Использование:

def F_2(): 
    with suppressing_output(): 
     F_1() 
0

Да, но это ОЧЕНЬ ОБОРОТА!

import sys 
from io import StringIO 

def F_1(): 
    print("Hello") 

def F_2(): 
    F_1() 

def F_3(): 
    F_1() 

Хитрость заключается в том, чтобы перенаправить sys.stdout в никуда, когда вы это называете.

_stdout = sys.stdout #make a copy 
sys.stdout = StringIO() 
F_2() 
sys.stdout = _stdout #restore 

Тогда он ничего не печатает.

Смежные вопросы