如何仅获取Python函数的返回值?
我正在通过学习Python来了解编程,想知道是否可以只获取一个函数的返回值,而不获取其他部分。下面是代码:
假设这是主函数:
variable_a = 5
while variable_a > 0 :
input_user = raw_input(": ")
if input_user == "A":
deduct(variable_a)
variable_a = deduct(variable_a)
else:
exit(0)
然后这是扣除函数:
def deduct(x):
print "Hello world!"
x = x - 1
return x
发生的情况是,它会进行计算并不断扣除,直到变量variable_a变为0。然而,“Hello world!”被打印了两次,我觉得是因为variable_a = deduct(variable_a)(如果我错了请纠正我)。所以我在想,能不能只捕获deduct()的返回值,而不捕获其他内容?这样的话,在经过deduct()之后,variable_a就会只有一个简单的值2(没有“Hello world!”)。
我是不是漏掉了什么?:?
编辑备注: 我去掉了空行,这样可以直接粘贴到REPL中。
2 个回答
2
如果你不想让你的函数输出任何内容,最简单的办法就是在里面不要用 print
。:P
第一次调用 deduct
时,它只会打印那条信息,实际上并没有其他作用,所以你可以直接把那行去掉,这样就没问题了。
不过,有一种稍微复杂的方法可以让打印的内容不显示。你可以暂时用一个不做任何事情的占位符来替换程序的输出文件。
import sys
class FakeOutput(object):
def write(self, data):
pass
old_out = sys.stdout
sys.stdout = FakeFile()
print "Hello World!" # does nothing
sys.stdout = old_out
print "Hello Again!" # works normally
你甚至可以做一个上下文管理器,这样会更方便。
import sys
class FakeOutput(object):
def __enter__(self):
self.out_stdout = sys.stdout
sys.stdout = self
return self
def __exit__(self, *a):
sys.stdout = self.out_stdout
def write(self, data):
pass
print "Hello World!" # works
with FakeOutput():
print "Hello Again!" # doesn't do anything
print "Hello Finally!" # works
7
打印“Hello world”被称为副作用——这是函数产生的结果,但并不体现在返回值上。你想知道的是如何调用这个函数两次,一次是为了产生副作用,另一次是为了获取函数的返回值。
其实你根本不需要调用两次——一次就足够了,可以同时得到这两个结果。只需在这一次调用中捕获返回值即可:
if input_user == "A":
variable_a = deduct(variable_a)
else: