在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
之后运行,只有在函数返回后才打印返回值。