找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3214|回复: 7

[求助] python 内嵌函数的局部变量调用问题

1

主题

4

帖子

4

积分

贫民

积分
4
吹月的风 发表于 2017-6-20 23:50:17 | 显示全部楼层 |阅读模式
def funx():
    x=5
    def funy():
        nonlocal x
        x+=1
        return x
    return funy

a=funx()
print(a(),a(),a())
不明白为什么x=5没有反复执行,我的理解是6 6 6
回复

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
roverg 发表于 2017-6-21 09:59:52 | 显示全部楼层
return funy返回的是funy()这个函数的位置,所以你每次用a()都直接运行了funy(),跳过了x=5这个语句。
程序改成:
def funx():
    x=5
    def funy():
        nonlocal x
        x+=1
        return x
    return funy()
a=funx()
print(a,a,a)
得到的结果就会是6 6 6了
回复 支持 1 反对 0

使用道具 举报

0

主题

16

帖子

16

积分

贫民

积分
16
左手十字 发表于 2017-6-21 08:24:52 来自手机 | 显示全部楼层
两个地方是错误的,return funy()才能调用内部函数,print()
回复 支持 反对

使用道具 举报

0

主题

16

帖子

16

积分

贫民

积分
16
左手十字 发表于 2017-6-21 08:25:52 来自手机 | 显示全部楼层
print(a,a,a)
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
吹月的风  楼主| 发表于 2017-6-21 08:46:56 | 显示全部楼层
左手十字 发表于 2017-6-21 08:24
两个地方是错误的,return funy()才能调用内部函数,print()

对的 你运行就知道了
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
吹月的风  楼主| 发表于 2017-6-21 08:48:03 | 显示全部楼层
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
吹月的风  楼主| 发表于 2017-6-21 12:05:33 | 显示全部楼层
roverg 发表于 2017-6-21 09:59
return funy返回的是funy()这个函数的位置,所以你每次用a()都直接运行了funy(),跳过了x=5这个语句。
程序 ...

''直接运行了funy(),跳过了x=5这个语句。'' 是什么意思, funy不是在函数里面的吗,外面调用不了啊。我刚学python没多久
回复 支持 反对

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
乍入芦芋 发表于 2017-6-21 14:27:35 | 显示全部楼层
a=funx
print(a()(),a()(),a()())

x=5 本身就不在内嵌的函数内  
回复 支持 反对

使用道具 举报

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

本版积分规则

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