python学习笔记——变量作用域

1局部作用域

输入

def v1():
    a = 5  #局部变量,只在函数内部使用
    print(a)

v1()
print(a)   #报错,无法再函数外部访问局部变量

输出

5
Traceback (most recent call last):
  File "xxxxxxxxxxxx", line 6, in <module>
    print(a)
NameError: name 'a' is not defined

2闭包作用域

def out1():
    a = 7  #闭包
    def in1():
        b = 8  #局部
        print(a)  #可以输出,闭包作用域的范围大于局部作用域的范围
    print(b)  #报错,闭包中无法访问局部变量,b的作用域仅仅在4,5两行
    in1()

out1()

3全局作用域

输入

age = 12  #全局变量,拥有 全局作用域,可以在任何位置访问到
def person():
    name = "tom"
    print(name)
    print(age)  #局部中可以访问全局变量age

person()

输出

tom
12

4系统内建变量的作用域

系统固定模块中的,如print(),可以在任何位置访问

查找规则:LEGB

输入

sum1 = 0
def sum(a,b):
    sum1 = a + b
    print(sum1,"局部变量")  #之所以打印的不是0是因为先从局部中找的
    return sum1

sum(4,5.)
print(sum1,"全局变量")

输出

9.0 局部变量
0 全局变量

 若想通过全局变量改变全局变量,则可以使用global关键字,例如:

输入

sum1 = 0
def sum(a,b):
    global sum1   #让局部使用全局变量而不是重新定义变量
    sum1 = a + b  #通过局部变量sum1改变全局变量sum1的值
    print(sum1,"局部变量")  
    return sum1

sum(4,5.)
print(sum1,"全局变量")

输出

9.0 局部变量
9.0 全局变量

注意:只有模块,类,和函数才会产生新的作用域

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值