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

    python的变量作用域

    # 1、作用域即范围 - 全局范围(内置名称空间与全局名称空间属于该范围):全局存活,全局有效   
    # - 局部范围(局部名称空间属于该范围):临时存活,局部有效 
    # 2、作用域关系是在函数定义阶段就已经固定的,与函数的调用位置无关
    # LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__
    # locals 是函数内的名字空间,包括局部变量和形参
    # enclosing 外部嵌套函数的名字空间(闭包中常见)
    # globals 全局变量,函数定义所在模块的名字空间
    # builtins 内置模块的名字空间
    name = 'ajune globals'  # globals
    
    
    def fun():
        name = 'ajune enclosing'  # enclosing
    
        def fun1():
            name = 'june locals'  # locals
            print(name)
    
        return fun1()
    
    
    fun() #  结果是 june locals
    fun()  # 将name = 'june locals'注释掉后,结果是ajune enclosing
    fun()  # 将name = 'june locals'和name = 'ajune enclosing'注释掉后,结果是ajune globals

    当要使用内部函数与外部函数之间的变量时,可以通过关键字nonlocal来使用变量

    def fun():
        name = 'ajune enclosing'  # enclosing
        print(name, id(name))
        
        def fun1():
            nonlocal name  # locals
            print(name, id(name))
    
        return fun1()
    
    
    fun()

    通过id()可以看到fun1()函数使用的name 还是属于enclosing层的。那如果想使用global层的变量呢?在使用的时候通过global关键词使用。并且通过这种方式还可以在内部函数内修改外部的变量。对于列表就不要这样了,列表属于全局变量,在函数内部可以直接使用。

  • 相关阅读:
    enumerate函数和zip函数返回的对象,都需要用list()函数转换为列表
    zip函数
    列表和元组的互相转换
    元组和列表的区别
    帮小朋友写的第一个程序
    remove del pop的区别
    如何运用Linux进行查看tomcat日志
    Linux大全
    liunx中组合查询的命令
    常见的问题
  • 原文地址:https://www.cnblogs.com/June-King/p/10596208.html
Copyright © 2011-2022 走看看