命名空间

本文介绍了Python的作用域相关知识,包括全局、局部和内置命名空间,说明了加载顺序为内置、全局、局部,取值顺序为局部、全局、内置,还介绍了查看作用域内容的函数。此外,讲解了global和nonlocal关键字,用于改变外层变量,前者用于全局变量,后者用于找局部里离它最近的上层变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.作用域:变量或者函数的声明周期
  1.全局命名空间--> 我们直接在py文件中, 函数外声明的变量都属于全局命名空间
  2.局部命名空间--> 在函数中声明的变量会放在局部命名空间
  3.内置命名空间--> 存放python解释器为我们提供的名字, list, tuple, str, int这些都是内置命名空间
  # 最开始开辟一个自己的命名空间 -内置命名空间
  #加载顺序:内置=>全局=>局部
  #取值顺序: 局部==>全局==>内置
  globals() # 查看全局作用域中的内容
  locals() #查看当前作用域的内容

2.global nonlocal 对于外层变量 如果没有相关关键字修饰的话 只能读 不能改变
  global a # 表示当前作用域使用的a是全局中的变量
  这种 改变是危险的 共享的改变是危险的
  还可以定义一个全局的a(强制的)
  nonlocal a # 找的是局部里面,离他最近的上层的那个变量
  直到找到为止

 1 # 7, 下面代码成立么?如果不成立为什么报错?怎么解决?
 2 # 7.1
 3 #a = 2
 4 # def wrapper():
 5 #     print(a)
 6 # wrapper()
 7 # 不报错 调用顺序是局部、全局、内置
 8 # 7.2
 9 # a = 2
10 # def wrapper():
11 #     global a
12 #     a += 1
13 #     print(a)
14 #
15 #
16 # wrapper()
17 # 这个报错 添加一个关键字 global,只能这个全局变量 不能改变
18 # 要改变的话 需要加 关键字global
19 # 7.3
20 # def wrapper():
21 #     a = 1
22 #     def inner():
23 #         nonlocal a
24 #         print(a)
25 # 
26 #     inner()
27 # wrapper()
28 # 不报错 读这个变量是可以的
29 # 7.4
30 # def wrapper():
31 #             a = 1
32 #             def inner():
33 #                 a += 1
34 #                 print(a)
35 #             inner()
36 #     wrapper()
View Code

 

转载于:https://www.cnblogs.com/gaofeng-d/p/10580690.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值