例如我有这段代码:
def example():
a = 'goodbye'
if True:
print a
return 1
else:
print a
return 0
我想知道是否有任何可能的解决方案来编写一次“print a”并在每个“return”语句之前自动执行它。因此,如果我添加更多返回语句,我将不需要添加任何内容,但“print a”将执行。结果看起来像是:
def example():
a = "goodbye"
""" some code to implement print a """
if True:
return 1
else:
return 0
每次有return语句时,它仍会打印一个。
我尝试谷歌,但不知道单词查询,因为所有结果都是关于返回多个值。
更新:感谢各位回答我的问题
虽然包装功能是正确的答案,但我选择了GingerPlusPlus的答案,他建议使用try...finally
来简化。
答案 0 :(得分:8)
您可以使用上下文。使用要打印的值对其进行初始化。然后在上下文退出时打印,即在返回时打印。
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
这将打印您传递给装饰器的任何字符串,然后是装饰函数返回的值。这里hello 1
。
答案 1 :(得分:6)
try .. finally
:
def example():
try:
if True:
return 1
else:
return 0
finally:
print 'goodbye'
>>> example()
goodbye
1
finally 子句总是在离开
try
语句之前执行,无论是否发生了异常。 Docs
答案 2 :(得分:3)
<强>代码:强>
def example():
a = 'goodbye'
print a
if True:
return 1
else:
return 0
如果您在print a
之前if else
,那么每次调用该函数时它都会打印值。
答案 3 :(得分:2)
创建值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
答案 4 :(得分:2)
如果适合您的情况,您也可以使用装饰器:
>>> 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
装饰器允许您在调用修饰函数后打印任何文本。或之前。
答案 5 :(得分:1)
Def example():
a = 'goodbye'
if True:
return 1,str(a)
else:
return 0,str(a)
print example()
这是唯一的方法......我不认为有办法避免输入你想要打印的东西......对不起伙计!期待你输入一个认为你的函数类型