11-Python-作用域和命名空间

简介: 11-Python-作用域和命名空间

作用域

  • 作用域:是针对变量而言的,一个变量的作用域总是由在代码中被赋值的地方所决定
  • 搜索顺序:LEGB原则(局部作用域、嵌套作用域、全局作用域、内建作用域)

命名空间

  • 命名空间:名称到对象的映射。是一个字典的实现,键为变量名,值是变量对应的值。各个命名空间是独立的。一个命名空间中不能有重名。

   按变量定义位置分

  • 局部命名空间:每个函数所拥有的命名空间,记录函数中定义的所有变量
  • 全局命名空间:每个模块加载执行时创建的,记录模块中定义的变量
  • 内建命名空间:自带的,任何模块均可以访问,放着内置函数和异常

二者之间关系

  • 命名空间定义了在某个作用域内变量和绑定值之间的关系,是键值对的集合,变量名和值一一对应,以字典的形式存在
  • 作用域定义了命名空间中的变量能够在多大的范围起作用,解释器定义的一种规则,确定运行时变量查找的顺序、

代码示例

1. # -*- coding: utf-8 -*-
2. # @Time    : 2021/4/8
3. # @Author  : 大海
4. 
5. def scope_test():
6. def do_local():
7.         spam = "local spam"
8. 
9. def do_nonlocal():
10. # nonlocal 语句表明特定变量生存于外层作用域中并且应当在其中被重新绑定
11. nonlocal spam
12.         spam = "nonlocal spam"
13. 
14. def do_global():
15. # global 语句可被用来表明特定变量生存于全局作用域并且应当在其中被重新绑定
16. global spam
17.         spam = "global spam"
18. 
19.     spam = "test spam"
20.     do_local()
21. print("After local assignment:", spam)  # test spam
22.     do_nonlocal()
23. print("After nonlocal assignment:", spam)  # nonlocal spam
24.     do_global()
25. print("After global assignment:", spam)  # nonlocal spam
26. 
27. 
28. scope_test()
29. # 局部 赋值(这是默认状态)不会改变 scope_test 对 spam 的绑定。 nonlocal 赋值会改变 scope_test 对 spam 的绑定,而 global 赋值会改变模块层级的绑定。
30. print("In global scope:", spam)  # global spam

 

目录
打赏
0
0
0
0
3
分享
相关文章
[oeasy]python069_当前作用域都有些什么_列表dir_函数_builtins
本文介绍了Python中`dir()`函数的使用方法及其作用。`dir()`可以列出当前作用域内的所有变量和成员,类似于`locals()`,但`dir()`不仅限于本地变量,还能显示模块中的所有成员。通过`dir(__builtins__)`可以查看内建模块中的所有内建函数,如`print`、`ord`、`chr`等。此外,还回顾了`try-except-finally`结构在数据库连接中的应用,并解释了为何`print`函数可以直接使用而无需导入,因为它位于`__builtins__`模块中。最后,简要提及了删除`__builtins__.print`的方法及其影响。
54 0
|
6月前
|
在Python中,什么是作用域
【10月更文挑战第12天】在Python中,什么是作用域
60 2
|
7月前
|
关于 Python 列表解析式的作用域问题
关于 Python 列表解析式的作用域问题
76 11
解密 Python 的作用域和名字空间
解密 Python 的作用域和名字空间
68 1
|
8月前
|
Python变量的作用域_参数类型_传递过程内存分析
理解Python中的变量作用域、参数类型和参数传递过程,对于编写高效和健壮的代码至关重要。正确的应用这些概念,有助于避免程序中的错误和内存泄漏。通过实践和经验积累,可以更好地理解Python的内存模型,并编写出更优质的代码。
75 2
|
8月前
|
深入解析 Python中的命名空间和作用域并举例
【8月更文挑战第15天】Python中的命名空间与作用域是理解变量组织与访问的核心。命名空间是名称到对象的映射,分为全局、局部和内置三种。作用域定义变量的可访问范围,遵循LEGB规则:局部(L)、闭包(E)、全局(G)、内置(B)。示例展示了如何通过`nonlocal`声明跨作用域修改变量。这些机制确保了变量的有效管理和代码的高效执行。
84 0
|
8月前
|
Python中的命名空间
【8月更文挑战第8天】本文深入探讨了Python中命名空间与作用域的概念及其应用。命名空间管理变量名与对象间的映射关系,分为全局、局部及内建三种。全局命名空间包含模块顶层定义的变量,局部命名空间则由函数内部定义的变量构成,内建命名空间包括Python的所有内置函数与异常。作用域规定了变量的可见范围,包括全局、局部、嵌套及内建作用域。文章通过多个代码示例展示了不同作用域下的变量访问规则,如局部变量仅在函数内部有效,而全局变量可在整个模块中访问。此外,还介绍了作用域链的查找机制、如何通过`global`和`nonlocal`关键字修改不同作用域内的变量、如何利用闭包访问外部函数的局部变量。
85 0
Python进阶之旅:深入理解变量作用域、垃圾回收、拷贝机制与异常处理
Python进阶之旅:深入理解变量作用域、垃圾回收、拷贝机制与异常处理
|
10月前
|
Python教程:深入理解Python中的命名空间和作用域
在 Python 编程中,理解命名空间(Namespace)和作用域(Scope)是至关重要的。它们决定了变量和函数的可见性和访问性,并直接影响代码的结构和行为。本文将深入探讨 Python 3 中命名空间和作用域的概念、规则以及相关的高级主题。
135 4
|
10月前
|
Python的命名空间和作用域分析
在Python中,命名空间(Namespace)是用来存储变量名和对象引用之间映射关系的字典,而作用域(Scope)是指程序中变量可以被访问的区域范围。Python中的命名空间是用来存储变量名和对象引用之间映射关系的字典,Python中存在3种命名空间:内置命名空间、全局命名空间和局部命名空间。Python中存在3种命名空间:内置命名空间、全局命名空间和局部命名空间。局部作用域:由局部命名空间定义,在函数内部定义的变量只能在该函数内部访问。在全局命名空间中定义的变量可以在模块内的任何函数或类中直接使用。
84 3

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等