• 第十天函数进阶


    ---恢复内容开始---

    一 命名空间:

      全局命名空间:在定义函数和变量的时候会生成一个全局命名空间,在程序从上到下被执行的过程中被一次加载进内存。

        例如:我们曾经定义过的函数名或变量名称。

      局部命名空间:就是函数内部定义的名称。在函数调用过程中才会被放到内存中

      内置命名空间:python解释器启动时就存在于内存中的空间。

        例如:print()  list()  input()  等都有内置的命名空间。

      在局部:可以使用全局和内置命名空间

      在全局:可以使用内置命名空间和全局命名空间的变量

      即在大空间不能使用小空间里的变量,但是在小空间里可以使用大空间里的变量。

      在内置的命名空间里,是不能使用全局和全局变量的。

      另外注意:如果定义了和内置函数的自定义函数,自定义函数会覆盖内置函数。

      多个局部空间之间各自的变量是不共享的。

    二 作用域:

      全局作用域:作用在全局,包含全局和内置命名空间中的名字。

      局部作用域:作用在局部,包含函数内的名字。

        注意,对于不可变类型,在局部可以查看全局变量,但是不能直接修改。如果想要修改的话,需要使用global声名。

        但是尽量不要使用global 声名,尽量使用传参和接受参数去在局部和全局中传递参数。

    a = 1
    def adda():
    global a
    a += 1
    print(a)
    adda()
    >>> 2

        以上代码意味着,函数使用的是全局变量,而不是函数内的局部变量。

      locals() :用于查看全部的局部变量。

      globals() :用于查看全部的全局变量,甚至包含在局部中的变量。

      注意,函数产生的作用域是在定义函数的位置产生的,而不是在定义函数的位置产生的。

      所以,即使函数是在内部空间定义,而在全局空间调用,这个函数使用的还是内部嵌套的局部空间变量,而不是全局空间变量。

      

    三 闭包

      在外部函数定义了变量,在内部函数中调用了外部函数的变量,就以意味着这个内部函数就是一个闭包函数。

      如果print(函数名.__closure)如果打印了一个cell的结果,那么这个函数就是一个闭包。

      标准格式:

      def outer():

        a = 1

        def inner():

          print(a)

        return inner

      inn = outer()

      inn()

      意义:这个时候,虽然a不是一个全局变量,但是这个变量是会始终存在于内存中的。这个变量不会影响全局变量,又可以随时使用。

        目前应该还没有需求点,但是以后对于程序的优化作用是很大的。

  • 相关阅读:
    Java中如何设置表格处于不可编辑状态
    Android界面实现不成功(无报错)
    Eclipse网页报错
    【蓝桥杯】基础练习 十六进制转八进制 Java语言
    分析算法的复杂度
    Android Studio安装错误及解决办法
    Android程序报错以及解决办法
    Genymotion安装使用(配合Android Studio)
    Eclipse导入本地项目并运行
    蓝桥杯Java——安装软件Eclipse以及JDK
  • 原文地址:https://www.cnblogs.com/wanghanyao/p/10171926.html
Copyright © 2020-2023  润新知