在python函数中,有没有办法在每个返回语句之前执行一个语句?

在python函数中,有没有办法在每个返回语句之前执行一个语句?,python,python-2.7,Python,Python 2.7,例如,我有一段代码: def example(): a = 'goodbye' if True: print a return 1 else: print a return 0 我想知道是否有任何可能的解决方案来写一次“print a”,并在每个“return”语句之前自动执行它。所以,如果我添加更多的return语句,我就不需要添加任何内容,但会执行“printa”。结果将类似于: def example

例如,我有一段代码:

def example():
    a = 'goodbye'
    if True:
        print a
        return 1
    else:
        print a
        return 0
我想知道是否有任何可能的解决方案来写一次“print a”,并在每个“return”语句之前自动执行它。所以,如果我添加更多的return语句,我就不需要添加任何内容,但会执行“printa”。结果将类似于:

def example():
    a = "goodbye"
    """ some code to implement print a """
    if True:
        return 1
    else:
        return 0
每次有return语句时,它仍然会打印一个

我试着用谷歌搜索,但不知道如何使用word查询,因为所有结果都是关于返回多个值的

更新:我的问题得到了回答,感谢大家。
虽然包装函数是正确的答案,但为了简单起见,我选择了建议使用
try…finally
的答案。

代码:

def example():
    a = 'goodbye'
    print a
    if True:
        return 1
    else:
        return 0

如果在
If else
之前
打印一个
,则每次调用函数时它都会打印值。

创建一个值
returnval

returnval = 0  #default value
testval = 0 # Code to set up if
# code to set various values of testval
if testval == 0:
    returnval = 1
elif testval == 5:
    returnval = 2
else:
    returnval = 10

print a
return returnval

您可以使用上下文。使用要打印的值初始化它。然后在上下文退出时(即返回时)打印

class PrinterOnContextExit():
    def __init__( self, a ): self.a = a
    def __enter__( self ): pass
    def __exit__( self, exc_type, exc_value, traceback ): print( self.a )

def example():
    a = 'goodbye'
    with PrinterOnContextExit( a ):
        if True:
            return 1
        else:
            return 0
请注意,不能以这种方式打印返回值。如果您想要打印返回的值,那么应该使用装饰器

class PrintOnReturn():
    def __init__( self, a ): self.a = a
    def __call__( self, func ): return lambda *args, **kwargs: self.callFunc( func, *args, **kwargs )
    def callFunc( self, func, *args, **kwargs ): r = func( *args, **kwargs ); print( self.a, r ); return r

@PrintOnReturn( "hello" )
def example():
    if True:
        return 1
    else:
        return 0
这将打印您传递给装饰器的任何字符串,后跟装饰函数返回的值。这里
你好1

Def example():
a = 'goodbye'
if True:
return 1,str(a)
    else:
     return 0,str(a)
print example()

这是唯一的方法…我不认为有一种方法可以避免键入你想要打印的内容…对不起,伙计!如果您键入一个函数类型,则该函数类型认为您可以尝试。。最后:

def example():
    try:
       if True:
           return 1
       else:
           return 0
    finally:
        print 'goodbye'

>>> example()
goodbye
1
无论是否发生异常,finally子句总是在离开
try
语句之前执行


如果适合您的情况,您也可以使用装饰师:

>>> def decorator(text):
...     def wrapped(func):
...         def inner(*args, **kwargs):
...             result = func(*args, **kwargs)
...             print text
...             return result
...         return inner
...     return wrapped
... 

>>> @decorator('goodbye')
... def example():
...     return True
... 

>>> example()
goodbye
>>> True

Decorator将允许您在调用修饰函数后打印任何文本。或者在此之前。

是否可以将其重写为只有一条返回语句?
if and else
loop?之前打印一条
。只需在方法内部使用
print
。一旦你执行
方法
,你就会从
print
语句中得到输出。如果你在decorator中用下面Didier的答案包装这项技术,那么你应该得到你想要的:记录退出点,而不必手动插入跟踪代码。试着添加更多细节,然后只添加代码。然后你会得到更多的投票。键入你想要执行的东西,并在你的示例函数中调用它……无论如何,祝你好运!这是从中返回时打印内容的最佳方式function@didier-谢谢你的回答!我会添加断行,使代码更具可读性;根据您的示例,
finally:
子句在
try:
子句之前执行。在打印字符串的情况下,它可能是不相关的,但如果顺序对于更复杂的函数很重要,请谨慎行事。@pshep123:。finally中的代码在try之后运行,只有在函数返回后才打印返回值。