发现了一个奇怪的现象,当时迷惑不解。先举出这两个程序比较一下:
例1:
def Fun():
count = 10
print(10)
Fun()
运行之后会输出10.
例2:
def Fun1():
x = 5
def Fun2():
nonlocal x
x*=x
return x
return Fun2()
Fun1()
运行之后会输出25.
对比发现,在例2中,对Fun2()的调用时,为何必须要在前面加一个return,而例1中却不需要加?
经过仔细研究发现:原来例1中,之所以不用加return是因为print()起到了作用,如果例1不用print(),采用return count,也可以输出10.
为验证这个观点,将例2改为如下两种形式,发现采用print()就可以不用在调用函数时加return。(有点特别之处是,如果采用return这种形式,需要在Shell框里输入函数名才能执行。然而,采用print时,当在程序后面加有函数名时,则shell中就可以自动运行出结果,不需要再输入函数名。)
现在将例2改为如下两种形式,有相同的输出。
变化1:
def Fun1():
x = 5
def Fun2():
nonlocal x
x*=x
print(x)
Fun2()
Fun1()
运行同样输出25.
变化2:
def Fun1():
x = 5
def Fun2():
nonlocal x
x*=x
return x
print(Fun2())
Fun1()
运行后同样输出25!折腾变化几次,搞清楚为什么有的地方需要return,而有的地方不需要return了,哈哈哈!