鱼C论坛

 找回密码
 立即注册

关于内嵌函数的return的认知发现

已有 192 次阅读2018-4-8 18:11

发现了一个奇怪的现象,当时迷惑不解。先举出这两个程序比较一下:
例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了,哈哈哈!


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-3 15:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部