• 函数2


    函数的命名空间:

      >内置:python解释器内置的

      >全局:自定义,整个文件内都可以访问.

      >局部:只能在函数内使用,外部无法访问.

    x1 = 100   #全局变量
    
    def func():
        x2 = 200    #局部变量
        print(x1)    #因为是全局变量,所以可以在函数内去访问
    
    print(func())
    print(x2)       #因为是局部变量,所以无法从函数外部去访问NameError: name 'x2' is not defined
    生命周期:

    内置名称空间:只要python解释器已启动立马创建 关闭python解释器的时候内置名称空间自动销毁
    全局名称空间:只要你右键运行py文件会自动创建 py文件程序运行结束自动销毁
    局部名称空间:函数被调用的时候自动创建 函数指向结束立即销毁(动态创建动态销毁)

    关于命名空间,还有一句很经典的致简名言:

    """
    函数在定义阶段查找名字的顺序就已经固定了 不会因为函数的调用位置变化而改变 ---- jasonji
    """
    def func():
        x = 100
        print(x)
    
    x = 200
    func()   #由于函数在定义时,print(x),就已经锁定了函数内的x=100,所以,无论在哪里调用,x都只会等于100.  
    #而从另一个角度分析,func()函数内的x是定义在局部变量的命名空间内,而外部的x=200是定义在全局命名空间内,所以,再者并没有关系.再从一个简化的角度去理解,变量的查找顺序,总是会从离自己最近的地方开始找.
    #变量查找顺序:局部>>全局>>内置

    其实由上面的一个小例子,就可以解开很多疑惑,理清很多思绪.在python内部,一切都是有紊紊有条的存放的.局部命名空间->>>全局命名空间->>>内置命名空间.搞清楚他们之间的规则,也就不会被繁杂的调用所混淆了.

    关于函数的作用域:

    global:局部修改全局 如果想修改多个 逗号隔开
    x = 100
    
    def func():
        global x     #改变全局命名空间内x的值
        x = 200
    
    func()
    print(x)        #所以最终打印x的值是200

    nonlocal:局部修局部 如果想修改多个 逗号隔开
    def func1():
        x = 100
        def func2():
            nonlocal x  #改变当前局部命名空间内x的值
            x = 200
        func2()
        print(x)       #所以打印x结果是200
    
    func1()

    知其然,更要知其所有然.本着技多不压身的原则,了解多一点,再了解多一点.

  • 相关阅读:
    TCP粘包的拆包处理
    字节序列化
    同步,异步,阻塞和非阻塞
    用Doxygen生成文档
    Visual Studio新建的源文件的默认编码
    Boost编程之获取可执行文件的当前路径
    特征点寻找的基础数据结构和函数
    寻找Harris、Shi-Tomasi和亚像素角点
    特征点的基本概念和如何找到它们
    工业相机与普通相机的差别
  • 原文地址:https://www.cnblogs.com/hellozizi/p/11164086.html
Copyright © 2020-2023  润新知