首页 > 其他 > 详细

CSIC_716_20191111

时间:2019-11-11 16:07:36      阅读:84      评论:0      收藏:0      [点我收藏+]

函数名是可以被引用,传递的是函数的内存地址。函数名赋值给变量后,只需要在变量后加上括号即可调用函数。

名称空间

内置名称空间:在python解释器中提前定义完的名字

全局名称空间:if、while、for循环中内部定义的变量,均是全局变量;存放于文件级别的变量,也是全局名称。

局部名称空间:函数内定义的所有名称,均存放在当前函数的名称空间,属于局部名称空间。

生命周期

内置名称空间:解释器生效内置名称空间即生效,解释器关闭即失效。

全局名称空间:.py文件生效全局名称空间生效,代码执行结束后失效。

局部名称空间:调用当前函数时失效,函数体代码执行结束失效。

 

名称空间查找顺序

局部名称空间:先找局部的再找全局的最后找内置的

全局名称空间:先找全局的,最后找内置的

 

global和nonlocal

如果在局部空间中申明global,被申明的变量会被当成全局变量。对其赋值会更新原先定义的同名全局变量的值。

如果在局部空间中声明nonlocal,被申明的变量一定要在函数嵌套的第二级,声明nonlocal后会影响其上一级函数的同名变量,但不会影响再上一级。(影响跨度为1层)。

如果函数体中没有嵌套函数,函数体中是不能使用nonlocal声明变量

函数体循环时,会从内往外找要寻找的值,先局部后全局,最后找内置。如果下级循环中没有值,会忘外层寻找,直到找到位置,遇到局部的global也会取其值,如下代码所示。(注意理解)

x=0
def func1():
    x = 1
    def func2():
        global x
        x = 2
        def func3():
            print(x, ‘func3‘)  # 2 func3
        func3()
        print(x, ‘func2‘)  # 2 func2
    func2()
    print(x,‘func1‘)  # 1 func1
func1()
print( x,‘all‘)  # 2 all

  

 

 

 

 

 

CSIC_716_20191111

原文:https://www.cnblogs.com/csic716/p/11835871.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!