命名空间 作用域

一,命名空间
本质是一个字典,记录变量名称和值。
可以局部命名空间(记录的参数以及在函数体中的声明变量),全局命名空间(整个py文件中的变量和函数),内置空间(记录的内置函数)
命名空间的顺序:
先从局部命名空间查找,再找全局空间,最后查找内置空间;
如果开始从全局命名空间查找,如果找不到想内置空间找,若找不到就报错
注意自己的变量名称不要和内置的变量名称相同否则会失效:
二,作用域:
变量的可用范围
根据变量声明的位置不同作用域可分为四类:
Local(函数内部)局部作用域。
Enclosing(嵌套函数的外层函数内部)嵌套作用域(闭包)。
Global(模块全局)全局作用域。
Built-in(内建)内建作用域。
局部作用域---->函数中声明的变量
嵌套作用域—>嵌套函数中外层函数体声明的变量
局部作用域---->py文件中的声明的变量
内置作用域---->python提供的变量(函数)
调用变量:
局部—>嵌套—>全局—>内置
使用变量:
局部<—嵌套<—全局<—内置
变量的搜索顺序:

a= 1
def outter():
    a = 10

    def inner():
        a = 20
        print(a)     #20,10,1

    inner()

outter()     #由内到外

在这里插入图片描述

全局和嵌套进行修改:
global a
nonlocal a

1
a =20

def func():
    global  a        #对a进行修改,对全局进行修改
    a=30
    print(a)          #所有id相同  

func()
print(a)

2
def outter():
    name='zs'

    def inner():
        nonlocal name                     #重新开辟一个空间,只能修改嵌套里面的
        name = 'ww'
        
        print(name)

    inner()
    print(name)

outter()

3
#nonlocal
name = 'zs'

def func1():
    name = 'ls'

    def func2():
        nonlocal name
        name='ww'
        print('func2的name---->',name)

    func2()
    print('func1的name--->',name)

func1()
print(name)       #zs  全局变量不会被修改

命名空间与作用域的关系
命名空间在每个作用域内变量名也绑定值一一对应,
作用域是变量作用的范围

def  func(c):
    a=10
    b =20
    print(locals())          #{'c': 40, 'b': 20, 'a': 10}   把c :40 添加到列表里

func(40)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值