我对使用python中的函数感到困惑。
假设我有这段代码
def calculate(a):
a = int(a)
return a # or yield a
然后我写作
def _convert(a):
a = int(a)
return a # or yield a+1
def calculate(a):
_convert(a) # is this correct or i need (return _convert(a))
- 内部返回功能是否一直持续到最后?
答案 0 :(得分:3)
没有。每个函数都需要返回自己的值。
def calculate(a):
return _convert(a)
现在,calculate
获取_convert
返回的值并将其返回给调用者。
在某些语言中,在没有显式return
语句的情况下,函数的返回值是最后一个语句的值。例如,在Perl中,
sub foo {
return 3;
}
sub bar {
foo();
}
bar
的返回值为3,因为执行的最后一个语句是foo
,其返回值为3.
None
,除非您使用return
语句返回不同的值。
答案 1 :(得分:2)
return
语句允许您确定函数调用在表达式中的值。如果一个函数调用另一个函数,则第二个函数会向第一个函数返回一个值。
因此,在第二个示例中,为了使calculate
向其调用者返回一个值,它必须确实使用return
语句,因此return _convert(a)
确实是正确的。
这些答案可以通过在交互式口译员中运行来轻松确定,我经常鼓励初学者将其用于此目的。
答案 2 :(得分:0)
您可能会感到困惑,因为int(a)
行没有增加a;它只是试图强迫它成为一个整数。
另一方面,请记住,每个没有"返回"表现得像是返回None,所以
def calculate(a):
_convert(a)
表现得像
def calculate(a):
_convert(a)
return None
所以如果你想返回转换后的值,那么你需要显式地返回_convert(a),就像你建议的那样:
def calculate(a):
return _convert(a)
实际上就像你自己调用第一个函数一样。