Python 基础 第七天

# Python3 命名空间和作用域
# 一般有三种命名空间:内置名称 全局名称 局部名称
# 内置名称:Python 语言内置的名称,比如函数名 abs、char 和异常名称 BaseException、Exception 等等
# 全局名称:模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量
# 局部名称:函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量。(类中定义的也是)

# 命名空间的生命周期取决于对象的作用域,如果对象执行完成,则该命名空间的生命周期就结束

# 作用域就是一个 Python 程序可以直接访问命名空间的正文区域
# Python的作用域一共有4种,分别是:
# L(Local):最内层,包含局部变量,比如一个函数/方法内部
# E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量
# G(Global):当前脚本的最外层,比如当前模块的全局变量
# B(Built-in): 包含了内建的变量/关键字等

# Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域
if True:
    msg = '你真好,真是个大SD'
print(msg) # 这里能够输出,说明在诸如if语句里面定义的变量是可以直接在外部访问

# 全局变量和局部变量
total = 0
def sum(a,b):
    total = a+b
    print("在里面是局部变量,total = ",total)
    return total
sum(10,20)
print("在外面是全局变量,total = ",total)
# global 和 nonlocal关键字
# 内部作用域修改外部作用域的变量 需要用到这两个关键字
# 修改全局变量:
num = 1
def fun1():
    global num
    print(num)
    num = 123
    print(num) # 外部参数num发生了变化
fun1()
print(num)
# 修改嵌套作用域
def outer():
    num = 1
    def inner():
        nonlocal num
        num = 100
        print(num)
    inner()
    print(num)
outer()
# 特殊情况
a = 10
def test():
    global a
    a = a+1
    print(a)
test()
print(a) # 外部的值的发生了改变
# 或者使用参数传递的方式:
a = 10
def test(a):
    a = a+1
    print(a)
test(a)
print(a) # 实际上外部的值没有改变
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值