Python内置函数locals和globals对比

yizhihongxing

Python内置函数 locals 和 globals 对比

在 Python 中,有两个内置函数 locals()globals() 用于获取当前作用域中的变量名称和变量值。

locals()

locals() 函数返回一个 Python 字典,其中包含当前作用域中的所有局部变量及其对应的值。

例如:

def foo():
    a = 1
    b = 2
    print(locals())

foo()

输出:

{'a': 1, 'b': 2}

可以看到,返回的字典中包含变量 ab 以及它们的值。

需要注意的是,locals() 函数只能在函数内部使用,它返回的字典不包含全局变量的信息。

globals()

globals() 函数返回一个 Python 字典,其中包含当前作用域中的所有全局变量及其对应的值。

例如:

a = 1
b = 2

def foo():
    print(globals())

foo()

输出:

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10d7bff40>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 1, 'b': 2, 'foo': <function foo at 0x10d7c35e0>}

可以看到,返回的字典中包含变量 ab 以及它们的值。

需要注意的是,当 globals() 函数在 Python 解释器的第一层(即全局作用域)调用时,返回的字典包含的信息会更多,包括解释器内置模块的名称和函数等。

对比

从上面的两个例子可以看到,locals()globals() 函数都可以用来获取当前作用域中的变量信息,但是它们的返回值是不同的。

  • locals() 函数只返回当前作用域中的局部变量,不包括全局变量。
  • globals() 函数返回当前作用域中的全局变量。

一般来说,在函数内部使用 locals() 函数,可以获得当前函数中定义的所有局部变量,而在函数外部使用 globals() 函数,则可以获得当前模块中定义的所有全局变量。

需要注意的是,为了避免命名冲突和不必要的状态泄露,应尽量避免在代码中使用 globals() 函数,除非真的有必要。

示例

以下示例展示了 locals()globals() 函数的用法:

a = 1
b = 2

def foo():
    x = 3
    y = 4
    print('Locals in foo():', locals())
    print('Globals in foo():', globals())

foo()

print('Locals in main:', locals())
print('Globals in main:', globals())

输出:

Locals in foo(): {'x': 3, 'y': 4}
Globals in foo(): {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x109ff0c10>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 1, 'b': 2, 'foo': <function foo at 0x109ff0d08>}
Locals in main: {'a': 1, 'b': 2, 'foo': <function foo at 0x109ff0d08>}
Globals in main: {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x109ff0c10>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 1, 'b': 2, 'foo': <function foo at 0x109ff0d08>}

可以看到,locals() 函数在 foo() 函数中返回的字典只包含局部变量 xy,而 globals() 函数返回的字典包含全局变量 ab,以及函数 foo() 本身。在 main 函数中使用这两个函数,返回的字典分别包含了函数 foo()、全局变量 ab

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python内置函数locals和globals对比 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 如何在Python中进行元编程?

    Python是一门具有元编程特性的语言,既允许运行时对自身进行修改,也允许程序在运行时创建新的代码。本文将介绍如何在Python中进行元编程,并包含两个示例说明。 1. 动态创建类 在Python中,类也是对象,其可以在运行时动态创建。下面是一个简单的例子,演示如何使用type()函数创建类。 class Person: name = "Tom&q…

    python 2023年4月19日
    00
  • Python&Matla实现模拟退火法的示例代码

    要实现模拟退火法的示例代码,可以使用Python和Matlab两种编程语言。下面分别介绍这两种语言的实现方法。 Python实现模拟退火法的示例代码 安装相关的Python库 在Python中实现模拟退火法,首先需要安装相关的Python库,包括numpy、matplotlib和scipy。 可以通过以下命令安装: pip install numpy pip…

    python 2023年6月6日
    00
  • 如何用python绘制雷达图

    下面是如何用Python绘制雷达图的完整攻略: 1. 简介 雷达图又叫蜘蛛网图、极坐标图,是通过在同一张图表上描绘多个相关变量的方法,通常用于展示相对值。如何用 Python 绘制雷达图呢?可以使用 Matplotlib 库中的 Polar(极坐标)功能进行绘制,接下来我们就来一步一步讲解。 2. 准备工作 在开始绘制雷达图之前,我们需要先引入 NumPy …

    python 2023年5月18日
    00
  • Python读取本地文件并解析网页元素的方法

    Python读取本地文件并解析网页元素的方法 在本文中,我们将介绍如何使用Python读取本地文件并解析网页元素。我们将使用BeautifulSoup库和正则表达式来解析网页元素。以下是详细的步骤和示例。 步骤1:读取本地文件 以下是读取本地文件的步骤: 使用open函数打开本地文件 with open(‘file.html’, ‘r’) as f: htm…

    python 2023年5月15日
    00
  • 用python写PDF转换器的实现

    用Python写PDF转换器的实现 PDF是一种非常流行的文档格式,但有时候我们需要将PDF转换为其他格式,如Word、HTML等。本文将介绍如何使用Python编写PDF转换器,并提供两个示例。 安装依赖库 在使用Python进行PDF转换之前,需要安装一些依赖库。以下是需要安装的依赖库: pdfminer.six:用于解析PDF文件 pdf2docx:用…

    python 2023年5月15日
    00
  • Python正则表达中re模块的使用

    Python正则表达式中re模块的使用 在Python中,re模块是一个强大的正则表达式处理工具,可以用于字符串匹配、替换、分割等操作。本攻略将详细讲解Python正则表达式中re模块的使用,包括如何使用re模块实现常见的文本处理需求。 re模块的基本用法 在Python中,我们可以使用re模块来处理正则表达式。re模块提供了一系列函数,用于处理正则表达式。…

    python 2023年5月14日
    00
  • python等待10秒执行下一命令的方法

    关于如何在Python中等待一定时间后再执行下一条命令,可以使用Python内置的time模块提供的sleep()函数来实现。 具体步骤如下: 1. 导入time模块 要使用time模块提供的sleep()函数,需要先导入该模块。可以在代码开头加上以下代码: import time 2. 使用sleep()函数 sleep()函数接收一个时间参数,单位为秒(…

    python 2023年5月19日
    00
  • python中dump与dumps实现序列化

    当我们需要将数据从Python转换为字符串,以便在网络上或其他接受数据的程序之间传输时,就需要使用序列化。序列化是将数据结构或对象转换为一系列字节以进行传输的过程。 在Python中,我们可以使用pickle或JSON等模块进行序列化。其中,pickle模块使用Python的特定格式进行序列化,不能被其他语言直接读取,而JSON则支持多种语言,是一个通用的数…

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