return的奇奇怪怪
def Fun1():x = 5
def Fun2():
nonlocal x
x *= x
return x
return Fun2()
这个感觉很奇怪,return x是对函数Fun2(),可是Fun2()又无法调用,第二个return Fun2()是对Fun1()有一个返回值,怎么返回的是一个函数,不理解,求大神解释一下
---------可是Fun2()又无法调用
这里fun2本身确实没有自我调用
但是最后一句代码却对它进行了调用 def fun1():
x = 5 #
def fun2():
nonlocal x #声明非局部变量
x *= x #x=x**2
return x #返回x
接下来:
return fun2() #加了括号,返回fun2的返回值25
return fun2 #没加括号,返回值就是fun2这个函数
请楼主测试一下 以下代码加深一下对函数地址的理解:
def wp():
return print
wp()("你说奇怪不,咋还能这样玩???") def Fun1():
# 第二步 定义变量
# 需要注意的是,这个x只能在 Fun1 这个函数内部使用
x = 5
# 第三步 定义函数
# 这里只定义函数 不执行
# 目前为止 Fun2 只能在 Fun1 内部进行过调用
# 因为 Fun2 的作用域只在 Fun1的内部
def Fun2():
# 第五步 执行 函数Fun2 这个函数的代码
# nonloccal 声明 x 可以在 Fun2 这个函数内使用
nonlocal x
# 5 * 5 = 25
x *= x
# 将 x 的值 作为Fun2 这个函数的返回值返回
# 哪里调用了 Fun2 哪里就能接收到这个返回值
return x # 在这里可以理解为 return 25
# 到这里第五步结束 将结果 给第四步的 那个return
# 第四步 返回 Fun2 这个函数的运行结果
# 这时候也是调用函数的时候。
# 函数名 + () 就代表调用函数
return Fun2()# 这里调用了 Fun2 所以这里能接收到Fun2 的返回值
# 只有第五步完成,第四步才会结束。第四步结束才能把返回值给第一步的 f
# 这里也可以理解为 return 25 到这里第四步运行结束
# 将返回值 25 给 第一步的 f
# 第一步 调用 Fun1 函数 拿到这个函数的返回值
# 只有第四步运行结束,才能拿到返回值
f = Fun1()
# 打印结果 25
print(f)
# 补充一个知识点
# 函数名后面加括号就是在调用函数,以后看到 func() 这样的写法,不用考虑一定是调用了函数
# 你一直说Fun2 这个函数没有被调用,实际上在第二个return的地方就已经被调用了。
你把代码的执行顺序搞明白就没毛病了。
这个代码有个专业的术语,叫做闭包函数。
实际上定义在函数内的 Fun2() 的执行是由 return Fun2() 来调动的。
页:
[1]