zoukankan      html  css  js  c++  java
  • 名称空间与作用域 闭包函数

    一、什么是名称空间?

    1.名称空间:存放名字的地方,有三种名称空间(之前遗留的问题:  例如:  x=1,1存在与内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方)

    2.名称空间分为三大类:

      内置名称空间:存放的是python解释器自带的名字

          生产:python解释器的启动则产生

          销毁:python解释器关闭则销毁

      全局名称空间:在顶级定义的名字

    x=1

    if True:

      y=2

    while True:

      while True:

        while True:

          z=3

    def func():

      pass

          产生:执行python程序时产生

          销毁:python程序执行完毕后则销毁

    局部名称空间:在函数内定义的名字

    def foo():

      m=100

    foo()

      产生:在函数调用时临时产生

      销毁:在函数diadiaoyo调用后则销毁

    三种名称空间的产生的先后顺序:内置=》全局=》局部

    查找名字的顺序:从当前位置往外一层一层的查找

      如果当前在局部名称空间:局部=》全局=》内置

      如果当前在全局名称空间: 全局=》内置

     1 # len=111
     2 # def foo():
     3 #     # len=222
     4 #     print(len)
     5 # len=111
     6 # foo()
     7 
     8 
     9 # x=0
    10 def f1():
    11     # x=1
    12     def f2():
    13         # x=2
    14         def f3():
    15             # x=3
    16             print(x)
    17         f3()
    18     f2()
    19 f1()
    20 
    21 
    22 def foo1():
    23     def foo2():
    24         def foo3():
    25             print(x)

    **************************************************************************************************  

    作用域即范围

      全局范围(内置名称空间与全局名称空间属于该范围); 全局存活,全局有效

      局部范围(局部名称空间属于该范围);临时存活,局部有效

    2.作用域关系是在函数定义阶段就已经国定的,与函数的调用位置无关,如下:

     1 x=1
     2 def f1():
     3     def f2():
     4         print(x)
     5     return f2
     6 x=100
     7 def f3(func):
     8     x=2
     9     func()
    10 x=10000
    11 f3(f1())

    3.查看作用域:globals(),locals()

    LEGB代表名字查找顺序:locals=》enclosing   function  =>globals=>_builtins_

    locals是函数内名字空间,包括局部变量和形参

    enclosing 为外部嵌套函数的名字空间(闭包中常见)

    globals  全局变量,函数定义所在模块的名字空间

    builtins 内置模块的名字空间

  • 相关阅读:
    阿里云安装Mono 发生错误解决方法
    在Entity Framework 中执行Tsql语句
    WinRT app guide
    开源稳定的消息队列 RabbitMQ
    Catpic: OpenSocial Container on .NET
    MSDTC 故障排除
    HTML5 canvas图形库RGraph
    《我的WCF之旅》博文系列汇总
    TSQL Enhancement in SQL Server 2005[下篇]
    谈谈基于SQL Server 的Exception Handling[上篇]
  • 原文地址:https://www.cnblogs.com/frank007/p/9707380.html
Copyright © 2011-2022 走看看