C++和python的名称空间的不同

Posted gyulaaa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++和python的名称空间的不同相关的知识,希望对你有一定的参考价值。

C++名称空间

  C++的名称空间主要分为三层概念:声明区域、潜在声明区域、作用域。

  1. 声明区域:简单来说就是可以声明变量的区域,等同于python的名称空间。C++的每个文件和每一个代码块(用大括号括起来的一段代码)就是一个声明区域,也就是在声明区域内定义的变量,在声明区域外是不可访问的。

  2.潜在作用域:变量的潜在作用域从声明点开始,到声明区域的结尾。潜在作用域的意思就是理论上这个变量能覆盖的区域,但是由于一个变量的潜在作用域中也可能包含了其他的声明区域,如一个函数、一个类或者一个代码段,因此在函数内部定义的同名变量就会屏蔽掉外部的同名变量。

  3.作用域:一个变量实际能够覆盖的区域,在C++里就是变量的潜在作用域减去那些被内部的声明区域屏蔽掉的部分。

 

python名称空间

  1.名称空间:python中只有函数、类、模块才构成一个名称空间。其它的代码块不是一个完整的名称空间(如如 if/elif/else/、try/except、for/while等),也就是说在这些代码块内定义的变量,外部也可以访问。其中可分为内置名称空间、全局名称空间、局部名称空间。

  • 内置名称空间:Python 语言内置的名称空间,包括函数名 abs、char 和异常名称 BaseException、Exception 等等。
  • 全局名称空间:文件产生的全局名称空间,模块也是一个文件
  • 局部名称空间:类和函数所代表的名称空间

  2.python中,寻找一个变量名对应的变量,会根据LEGB规则

  • 先在当前名称空间寻找,当前名称空间可能是类和函数产生的局部名称空间①,或者是文件产生的全局名称空间②。
  • 如果没找到,在②的情况下,会去内置名称空间中查询,如果找到就正常调用,没找到就会报错。在①的情况下,会去上层的局部或者全局的名称空间查询

  

 

总结:C++的名称空间和python的名称空间都可以看成一棵树,上层名称空间嵌套下层名称空间,且同层的名称空间之间不会有重叠。寻找变量名对应的变量时,都是根据这棵有名称空间构成的树,一层一层向上查询。不同的是,python和C++中构成名称空间的规则不同。

 

以上是关于C++和python的名称空间的不同的主要内容,如果未能解决你的问题,请参考以下文章

Python名称空间和闭包

python——装饰器

Python之路 函数进阶

Python中的命名空间是啥?

python基础之名称空间和作用域函数嵌套

命名空间简记