鱼C论坛

 找回密码
 立即注册
查看: 2869|回复: 7

[已解决]Python 关于return的问题,求详解

[复制链接]
发表于 2021-3-24 10:34:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def count():
    fs = []
    for i in range(1,4):
        def f():
            return i*i
        fs.append(f)
    return fs


f1, f2, f3 = count()  #我知道count()返回的是一个列表,其中是三个地址,但三个地址为什么都存有同一个一个数字9呢
print(f1())
print(f2())
print(f3())
'''输出:
9
9
9'''
最佳答案
2021-3-24 10:50:43
i的值受函数内局部变量i的影响

最后一次结果i=3

函数的返回值都是3*3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-24 10:50:43 | 显示全部楼层    本楼为最佳答案   
i的值受函数内局部变量i的影响

最后一次结果i=3

函数的返回值都是3*3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-24 10:57:58 | 显示全部楼层
本帖最后由 jackz007 于 2021-3-24 11:02 编辑

def count():
. . . . . .
    for i in range(1,4):
        def f():
            return i*i
        在这个关系中,i 属于 f() 的外部变量,当使用 f1()、f2()、f3() 调用 f() 时,count() 已经调用完毕,就是说,for 循环已经执行完毕,循环变量 i 显然应该等于 3,这个 i 同时又是函数 f() 的外部变量,而函数 f() 返回的是 i * i,那可不就是 9 了吗!

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
曾哥870 + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-3-24 10:58:04 From FishC Mobile | 显示全部楼层
逃兵 发表于 2021-3-24 10:50
i的值受函数内局部变量i的影响

最后一次结果i=3

听得不是很明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-24 11:02:56 From FishC Mobile | 显示全部楼层
jackz007 发表于 2021-3-24 10:57
在这个关系中,i 属于 f() 的外部变量,当使用 f1()、f2()、f3() 调用 f() 时,count() 已经调 ...

大佬,也就是说把那个append函数加入到for循环中,就可以得到他想要的结果了是吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-24 11:06:16 | 显示全部楼层
本帖最后由 jackz007 于 2021-3-24 11:09 编辑
曾哥870 发表于 2021-3-24 11:02
大佬,也就是说把那个append函数加入到for循环中,就可以得到他想要的结果了是吗?


       append() 的内容是 f(f() 的 f),就是函数 f() 的调用地址,而不是对 f() 的调用结果,这也是为什么可以通过 f1()、f2() 、f3() 调用到函数 f() 的根本原因。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-24 11:12:58 | 显示全部楼层
本帖最后由 柿子饼同学 于 2021-3-24 11:19 编辑
def count():
        fs = []
        for i in range(1, 4):
                def f():
                        return i*i
                fs.append(f)
        return fs
为什么我写了之后什么也没有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-24 11:14:36 | 显示全部楼层
首先你要知道,函数只有在调用的时候,函数体中的代码才会执行。当你调用count方法时,返回的fs列表中包含f方法的三个引用,然后三个引用分别赋值给f1, f2, f3(注意现在i已经等于3了) ,此时f1, f2, f3还没有被调用,当在print的时候分别调用了f1, f2, f3三个方法,所以返回的也就都是9.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-1-9 16:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表