找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2929|回复: 7

[求助] 麻烦各位先行者帮忙看看这段代码。。实在是有点晕

1

主题

4

帖子

4

积分

贫民

积分
4
colleens 发表于 2018-3-29 00:52:15 | 显示全部楼层 |阅读模式
def g():
    a=[]
    for i in range(5):
        def f(x,i=i):
            return a.append(x**i)      
    return a
以上代码是想得到列表a,为什么只有下面这段才行呢,上面的代码问题出在哪里呢,自学python,在作用域这块学的有点晕啊。。求指教
def g():
    a=[]
    for i in range(5):
        def f(x,i=i):
            return x**i
        a.append(f)
    return a

回复

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
colleens  楼主| 发表于 2018-3-29 01:06:00 | 显示全部楼层
def g():
    a=[]
    for i in range(5):
        def f(x,i=i):
            return a.append(x**i)        
    return f
print(g()(2))
或者说是这样 也不能实现呢。。?
回复 支持 反对

使用道具 举报

0

主题

7

帖子

7

积分

贫民

积分
7
wussrc 发表于 2018-3-29 11:21:40 | 显示全部楼层
列表的append()方法返回值为None,也就是没有返回值的
所以你直接return a.append()貌似是不行的
回复 支持 反对

使用道具 举报

5

主题

101

帖子

101

积分

版主

Rank: 7Rank: 7Rank: 7

积分
101

最佳新人活跃会员热心会员突出贡献

QQ
落叶秋风 发表于 2018-3-29 11:34:08 | 显示全部楼层
我按照我自己的见解来解释下,不一定对,做个参考,第一份代码
def g():
    a=[]
    for i in range(5):
        def f(x,i=i):
            return a.append(x**i)      
    return a
虽然定义了f函数,却没有调用,通俗的来讲就是订了房子却还没付钱,房子没有真正的属于你。
第二份代码行的通的原因是因为调用了定义的f函数
第三份代码不行的原因是你return f的作用域不对,for循环完了才调用,并且即使作用域对了也就执行一次。
回复 支持 反对

使用道具 举报

5

主题

101

帖子

101

积分

版主

Rank: 7Rank: 7Rank: 7

积分
101

最佳新人活跃会员热心会员突出贡献

QQ
落叶秋风 发表于 2018-3-29 11:35:55 | 显示全部楼层
还有你这个代码根本跑不起来啊,a列表中全是函数的内存地址
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
colleens  楼主| 发表于 2018-3-29 17:13:38 | 显示全部楼层
落叶秋风 发表于 2018-3-29 11:35
还有你这个代码根本跑不起来啊,a列表中全是函数的内存地址

a列表确实全是函数的内存地址,是因为嵌套函数参数变量没有给定,print(a[2](3)),可以得出列表第3项
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
colleens  楼主| 发表于 2018-3-29 17:17:14 | 显示全部楼层
落叶秋风 发表于 2018-3-29 11:34
我按照我自己的见解来解释下,不一定对,做个参考,第一份代码
def g():
    a=[]

您说的确实有道理,确实是嵌套函数f没有调用的原因,第三份行不通也确实是for循环完了才调用,结果每次都是调用了i=4这种情况,万分感谢,你的回答对我启发很多,我之前的理解就不对,总以为def后面的语句是依次执行。。。其实存在定义却没有调用的情况,在这种情况下,嵌套函数根本没用。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

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