python的作用域

python的作用域并不是哪里都能访问的,类似于Java,分全局和局部,python变量的作用域大概分为以下四类:

L(local) 局部作用域 
E(Enclosing) 闭包函数外的函数中 
G(Global) 全局作用域 
B(Built-in) 内建作用域

遵循LEGB原则:以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

x = int(2.9)  # 内建作用域

g_count = 0  # 全局作用域
def outer():
    o_count = 1  # 闭包函数外的函数中
    def inner():
        i_count = 2  # 局部作用域


在python中,模块(module),类(class)、函数(def、lambda)会产生新的作用域,其他代码块是不会产生作用域的,也就是说,类似条件判断(if…..else)、循环语句(for x in data)、异常捕捉(try…catch)等的变量是可以全局使用的

dataList = [1, 2, 3, 4]
for data in dataList:
    a = 1   #for循环中的变量a
    b = data + a

print(a) #在函数外也可视为全局变量使用


全局变量是指在函数外的变量,可以在程序全局使用,局部变量是指定义在函数内的变量,只能在函数内被声明使用

若内部作用域的想要修改外部作用域的变量,就要使用global关键字:参考一下代码

1、未使用global关键字


a = 1


def demo():
    # IDE提示a = 123:This inspection detects shadowing names defined in outer scopes
    # 大概意思是给变量取的这个名字,可能会冲突,它是函数外部的变量
    a = 123
    print(a)

demo()

print(a)


运行结果是

123
1
全局变量a的值还是1,没有被改变


2、使用global关键字

a = 1


def demo():
    global a
    a = 123
    print(a)

demo()

print(a)

运行结果是
123
123
全局变量a的值被修改


nonlocal 关键字的使用方法和global关键字类似,修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量

def outer():
    num = 10
    def inner():
        nonlocal num   # nonlocal关键字声明
        num = 100
        print(num)
    inner()
    print(num)
outer()

运行结果为
100
100
闭包函数外的变量num值被修改


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值