zoukankan      html  css  js  c++  java
  • 函数的作用域

    一。 作用域:

           命名空间:保存变量名的地方,变量被赋值的地方决定了这个变量能被访问到的范围

           模块的命名空间是在模块的顶层

           函数的命名空间是独立的,在def时创建,其作用域是由def在代码中的位置决定

    二。变量LEGB原则:

          L:Local,函数本地作用域 

          E:Enclosing function local,上一层def或lambda的本地作用域

          G: Globe:全局作用域,模块内

          B: Built-in:内置作用域

          

    三。内置作用域:

           有两种方法可以使用内置函数:

          1.LEGB自动搜索作用域,最终会搜索到Built-in内置作用域,从而可以获取所有的内置变量及函数的使用

          2.通过 import builtins 导入内置模块,才能用内置作用域

           

           

            

    四。global语句:

            注意:A。函数外有变量x,函数里给x赋值,即新建变量,如果没有global的声明,就是本地变量,不会影响函数外的

                         变量x的值,这是同名的两个不同的变量,如果有global的声明,按全局变量处理

                     B。函数外有变量x,函数里没有赋值的语句,只有调用x的语句,此时调用的是函数外的x的值,因为本地搜索

                          不到变量x的创建,就调用了外部全局的x变量。

            1.特性:

          

            2.示例

           

            3.最小化全局变量:最好别用

            4.最小话文件间修改:模块间调用,最好别调用彼此间的全局变量

            5.其他访问全局变量的方法:

    五。嵌套函数的作用域:

         1. 嵌套函数示例:

           

        2. 工厂函数:

           首选肯定是嵌套函数,同时下层函数(内嵌函数)能记住上层函数(外部函数)作用域的变量值,即使上层函数已经执行完,不处于激活状态,作用域也已经不存在了

           其调用方法通常是把函数赋值给一个变量,做两次调用,如上例的action变量的调用方式

           

            

         3.嵌套函数作用域与lambda:

             。。。。。。

    六。 nonlocal:

          内嵌函数只能调用外层函数的变量,但不能修改其值,要修改其值,必须在内嵌函数里对外层函数的变量做nonlocal的申明

          这是nonlocal的功能,

          注意:

          1.nonlocal声明的变量必须是定义在外层函数里的,否则会报错,更不允许在内嵌函数里创建此变量。

          2.nonlocal声明的变量只会在外层函数里去搜索,不会全局,和built-in变量里去搜索,即使全局,和built-in变量

             里有同名的变量。

          

                

    七。一些实例:

          

  • 相关阅读:
    linux下设置SSH无密码登陆
    设置sudo权限
    集群重启后启动ambari-server访问Web页面无法启动集群解决
    使用Ambari部署hadoop集群
    centos7.6安装python3.7
    Locust
    测试框架(自然语言)
    Maven之(七)pom.xml配置文件详解
    git的使用
    elastic search(es)安装
  • 原文地址:https://www.cnblogs.com/derekchen/p/5486666.html
Copyright © 2011-2022 走看看