详解python命名空间

Python中每个对象都存储在一个命名空间(namespace)中,命名空间相当于是一个名字到对象的映射。理解命名空间对于理解Python的作用域规则至关重要。

Python中命名空间可以分为三类:内置命名空间(built-in namespace)、全局命名空间(global namespace)和局部命名空间(local namespace)。

  1. 内置命名空间

内置命名空间是指Python解释器加载时自动加载的一些名字,并默认绑定到相应的对象上。这些名字在任何模块中都是可用的,无需导入便能使用,比如常见的printlist等。

以下是一个例子,可以通过dir(__builtins__)来查看内置命名空间。

import builtins

print(dir(builtins))  # 可以直接使用内置函数dir(),查看内置命名空间中的内容
  1. 全局命名空间

全局命名空间是定义在模块层级的命名空间,模块中定义的所有变量和函数名都属于全局命名空间。在模块被导入时创建,当程序执行结束时被销毁。

以下是一个例子,global_var是在全局命名空间中定义的变量。

global_var = 10

def func():
    print(global_var)

func()  # 输出10
  1. 局部命名空间

局部命名空间是在函数调用时创建的,函数调用结束后销毁。局部命名空间中的变量和函数名只在函数内部可见,在函数外部无法访问。

以下是一个例子,func中定义了局部变量local_var,只能在函数内部访问。

def func():
    local_var = 20
    print(local_var)

func()  # 输出20
print(local_var)  # NameError

总的来说,当Python解释器访问一个变量名时,它首先在内置命名空间中查找,如果没有找到则查找全局命名空间,如果还是没有找到则查找局部命名空间。如果变量还是没有找到,则会产生NameError异常。

参考资料:

  1. https://docs.python.org/3/tutorial/classes.html#scopes-and-namespaces-example
  2. https://realpython.com/python-namespaces-scope/#the-three-types-of-namespace

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

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

相关文章

  • python实现isodd函数

    下面是python实现isodd函数的完整攻略。 定义函数 首先,我们需要定义isodd函数。该函数用于判断一个数字是否为奇数,如果是奇数,返回True,否则返回False。具体代码如下: def isodd(num): if num % 2 != 0: return True else: return False 函数参数 isodd函数接受一个参数:nu…

    python 2023年4月15日
    00
  • python 的sub函数详解

    来让我们详细讲解Python的sub()函数。 一、sub()函数的使用 Python的re模块提供了sub()函数,它用于实现字符串的替换操作。下面是sub()函数的语法: re.sub(pattern, repl, string, count=0, flags=0) 其中,各参数的含义如下: pattern: 需要匹配的正则表达式模式。 repl: 替代…

    python 2023年4月15日
    00
  • python类实现多个构造函数

    实现多个构造函数的方法在Python中称为”重载构造函数”。Python不支持传统意义上的重载,但是可以通过实现一些技巧来实现多个构造函数。下面是Python实现多个构造函数的两种方法: 方法一:使用不同数量的参数 函数的参数列表中允许使用默认参数,那么我们就可以通过给不同的参数指定默认值来实现多个构造函数。如下所示: class Person: def _…

    python 2023年4月15日
    00
  • python编写计算阶乘的函数

    我将为您详细讲解如何使用Python编写计算阶乘的函数。 什么是阶乘? 阶乘是指一个正整数的所有小于它的正整数的积。例如,4的阶乘为4 × 3 × 2 × 1 = 24。 编写计算阶乘的函数 要编写计算阶乘的函数,我们可以使用递归或循环的方式。下面是递归方式的示例代码: def factorial_recursive(n): if n == 0: retur…

    python 2023年4月15日
    00
  • python类私有函数的使用方法

    Python中的私有函数是指以双下划线开头的函数,例如__private_func(),私有函数只能在类的内部使用,不能被类的实例直接调用。私有函数的作用通常是为其他公开函数服务,避免了内部实现细节被外部访问的风险。 下面是私有函数的使用方法攻略: 1. 私有函数的定义方法 私有函数的定义方式与普通函数相同,只是在函数名前加上双下划线 __,例如: clas…

    python 2023年4月15日
    00
  • python 欧拉函数是什么意思?如何使用

    Python 欧拉函数是一种数学函数,它以小于或等于自然数 n 的正整数中与 n 互质的数的数目作为输出。在数论和密码学中,欧拉函数是一个非常重要的函数。 欧拉函数可以写成如下的形式: $$ \varphi(n) = n \prod_{p | n} \left(1 – \frac{1}{p}\right) $$ 其中,p 是 n 的质因子,| 表示整除,$\…

    python 2023年4月15日
    00
  • python对数正态分布函数

    对数正态分布是指随机变量的对数服从正态分布的概率分布。在Python中,可以使用scipy.stats模块的lognorm函数来生成对数正态分布,并进行有关计算和绘图操作。下面详细讲解Python对数正态分布函数的完整攻略。 1. 导入模块 首先要导入所需的Python模块。我们需要使用numpy来生成数据,使用scipy.stats中的lognorm函数来…

    python 2023年4月15日
    00
  • 用python实现求组合数的函数

    下面是用Python实现求组合数的完整攻略: 1. 组合数基本概念 组合数是指从 n 个不同元素中,任取 m (0 <= m <= n) 个元素的所有不同组合的个数。通常用符号 C(n, m) 表示,其公式为:C(n,m) = n! / (m!(n-m)!)其中符号“!”表示阶乘运算,即连乘积。例如:5! = 5432*1 = 120 2. 实现…

    python 2023年4月15日
    00
合作推广
合作推广
分享本页
返回顶部