首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套Scopes误解

嵌套Scopes误解
EN

Stack Overflow用户
提问于 2018-01-24 20:21:08
回答 2查看 56关注 0票数 0

我完全理解Python中不同作用域的概念,但我不能清楚地理解这段代码,所以如果有人能向我解释它,第18行的返回是什么意思,我会很高兴的。例如,它不应该是return g()吗?G是什么意思?它是一个变量吗?输出为0x15b43b0的z=function g,这意味着什么?

最后一件事是,最后一行中的z()是什么?没有函数叫做z!

代码语言:javascript
复制
def f(x):
    def g():
        x='abc'
        print 'x=',x
    def h():
        z=x
        print 'z=',z
    x=x+1
    print 'x=',x
    h()
    g()
    print 'x=',x
    return g

x=3
z=f(x)
print 'x=',x
print 'z=',z
z()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-24 20:30:40

第18行的返回是什么意思?

它正在返回函数对象g本身。

例如,不应该返回g()吗?

不一定。传递函数是完全可以接受的,因为它们只是Python中的其他对象。return greturn g()都是有效的,意味着不同的东西。

G是什么意思?它是一个变量吗?

g是绑定到函数对象的名称,该函数对象在调用时打印x=abc,然后返回None。是的,g是一个变量(它是局部变量)。

输出为0x15b43b0的z=function g,这意味着什么?

这意味着名称z绑定到内存位置0x15b43b0的名为g的函数。(提示:它实际上是绑定到内部作用域中的名称g的同一个函数对象)

最后一件事是,最后一行中的z()是什么?

它意味着调用名称z所绑定的对象。也就是说,它调用f返回的函数。

没有称为z的函数。

这里没有__name__属性等于z的函数。但是名称z仍然可以绑定到函数对象。记住,对象可以有多个名称(或者根本没有名称)。

票数 3
EN

Stack Overflow用户

发布于 2018-01-24 20:27:42

g是用def定义的函数的名称。g()调用函数并给出结果,而g是函数对象本身的名称(引用)。

是的,有一个叫做z的函数。它等于调用f(x)返回的函数,即用arg x调用的函数f。这是与return g行相同的函数g

除了作用域外,您可能还需要检查高阶函数和闭包概念。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48430955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档