python命名空间和作用域

命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的

 

命名空间查找顺序:局部命名空间、全局命名空间、内置命名空间

 

相同的对象名称可以存在于多个命名空间中

 

作用域就是一个可以直接访问命名空间的正文区域。程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。python的作用域共有四种:

L(Local):最内层,包含局部变量,比如一个函数/方法内部

E(Enclosing):包含了非局部也非全局的变量。比如两个嵌套函数中间的变量

G(Global):当前脚本的最外层,比如当前模块的全局变量

B(Built-in):包含了内建的变量/关键字等,最后被搜索(通过builtins标准模块实现,要先导入)

规则顺序:L、E、G、B

 

python中只有模块、类、函数才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)不会引入新的作用域,这些语句内定义的变量,外部也可以访问

例如:

def aFunction():
    a = 1
    return a


print(a)

结果会报错:

print(a)
NameError: name 'a' is not defined

 

例如:

if True:
    a = 1
print(a)

结果不会报错:

1

 

全局变量和局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问

 

如果想在局部作用域想修改全局作用域的变量,要使用global关键字:

a = 1


def changeA():
    global a
    a = 2
    print(a)


changeA()

结果为:

2

 

也可以用通过函数参数传递:

a = 1


def changeA(a):
    a = 2
    print(a)


changeA(a)

结果为:

2

 

如果想修改嵌套作用域的变量需要使用nonlocal关键字

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python命名空间和作用域 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • python输入和输出

    输出 1、表达式语句 2、print() 3、write() 美化输出格式 repr()产生一个解释器易读的表达形式: a = ‘the sea has bank\nmy love is boundless’ print(a) print(repr(a)) # 可以转义特殊字符 结果为: the sea has bank my love is boundle…

    Python开发 2023年4月2日
    00
  • python爬虫

    Web请求过程 1、服务器渲染:在服务器那边直接把数据和html整合在一起,统一返回给浏览器 在页面源代码中能看到数据 2、客户端渲染:第一次请求只有一个html骨架,第二次请求拿到数据,进行数据展示(一般为XHR) 在页面源代码中看不到数据 <可用检查网页或者F12来查看>   HTTP协议 Hyper Text Transfer Protoc…

    Python开发 2023年4月2日
    00
  • 如何用html写书

    原理:利用xml.etree.ElementTree对html进行解析和写入 # encoding=utf-8import xml.etree.ElementTree as ET # 解析html、xmlname = input(‘type in file name:’)def circle(): tree = ET.parse(f'{name}.html’…

    Python开发 2023年4月2日
    00
  • python模块

    python模块是一个py文件,一个模块只会被导入一次   python在编译或安装的时候会确定搜索路径,使用import语句的时候,python解释器就从搜索路径(即一系列目录名)中查找模块 import sys print(sys.argv) # 命令行参数 print(sys.path) # 路径 结果为: [‘D:/Pycharm/pythonPro…

    Python开发 2023年4月2日
    00
  • python循环语句

    while循环 一般形式: while condition:   statement1 else:   statement2   a = 0 while a < 3: print(a) a = a + 1 else: print(a, ” 大于或等于3″) 结果为: 0 1 2 3 大于或等于3   无限循环: while True: # 或者一个永远…

    Python开发 2023年4月2日
    00
  • python面向对象

    传统的结构化设计方法的基本点是面向过程,系统被分解成若干个过程。而面向对象的方法是采用构造模型的观点,在系统的开发过程中,各个步骤的共同的目标是建造一个问题域的模型。在面向对象的设计中,初始元素是对象,然后将具有共同特征的对象归纳成类,组织类之间的等级关系,构造类库。在应用时,在类库中选择相应的类 面向对象编程的主要思想是把构成问题的各个事务分解成各个对象,…

    Python开发 2023年4月2日
    00
  • python基本数据类型

    python的变量不需要声明,但在使用前必须要赋值   多个变量赋值: a = b = c = 1 x, y, z = 1, True, ‘大湘菜’   python有六个标准的数据类型: Number、String、Tuple、List、Set、Dictionary,其中前三者为不可变数据,后三者为可变数据   Number: a, b, c, d = 1…

    Python开发 2023年4月2日
    00
  • python函数

    定义函数的一般格式: det function():   statements   return a return用于退出函数,向调用方返回一个表达式   函数可以不设置参数,也可以设置参数: def function1(): print(‘大湘菜’) def function2(a): print(a) function1() function2(‘小湘菜…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部