Python内置函数locals和globals对比

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与svg之间的操作

    一文带你了解Python与svg之间的操作 SVG(Scalable Vector Graphics),即可缩放矢量图形,是一种基于 XML 格式的图像标准。Python作为一种强大的编程语言,能够运用Python编写svg图形,也可以利用Python的库来操作svg图形。 本文将带领大家了解Python与svg之间的操作,包括Python如何生成SVG、S…

    python 2023年6月3日
    00
  • python pyinstaller打包exe报错的解决方法

    当我们使用Python编写程序后,通常会使用PyInstaller将程序打包成可执行文件。然而,在使用PyInstaller打包exe时,有时候会遇到一些报错。本攻略将绍一些常见的PyInstaller打包exe报错及其解决方法。 报错1:ModuleNotFoundError: No module named ‘xxx’ 这个错误通是于PyInstalle…

    python 2023年5月13日
    00
  • python自动化测试工具Helium使用示例

    Python自动化测试工具Helium使用示例 简介 Helium是Python的自动化测试工具,它可以自动化执行浏览器上的测试,并返回测试结果。Helium支持多种浏览器,包括:Chrome, Firefox, Internet Explorer, Safari等,并且可以通过模拟用户在浏览器上的操作,进行自动化测试。 安装 使用pip安装Helium: …

    python 2023年5月19日
    00
  • python中的多cpu并行编程

    针对题目要求,我为您详细讲解一下 Python 中的多 CPU 并行编程的完整攻略。 什么是多 CPU 并行编程 多 CPU 并行编程是指利用多个 CPU 同时进行任务处理,以提高程序的执行效率和速度。在 Python 中,多 CPU 并行编程多利用多进程或多线程实现,具体方式可以根据不同场景选择不同的模块或库。 多进程并行编程示例 以下是一个用 multi…

    python 2023年5月19日
    00
  • Python 从相对路径下import的方法

    当我们从一个 Python 脚本文件中使用 import 语句导入模块时,我们需要指定模块路径。通常,我们会使用绝对路径或相对路径来指定需要导入的模块。在本文中,我们将重点讨论如何在 Python 代码中使用相对路径导入模块。 什么是相对路径? 相对路径是指相对于当前脚本文件的路径,可以是相对于当前目录的路径,也可以是相对于父目录的路径。在 Python 中…

    python 2023年6月3日
    00
  • Python中字典的基本知识初步介绍

    以下是关于Python中字典的基本知识初步介绍的完整攻略: 什么是字典 字典是Python中的一种基本数据类型,用于存储键值对。每个键都与一个值相关联,可以使用键来访问与之相关联的值。 字典的基本用法 创建字典 可以使用花括号 {} 或 dict() 函数创建一个新的字典。 使用花括号创建字典的示例: person = {‘name’: ‘张三’, ‘age…

    python 2023年5月13日
    00
  • Python如何使用BeautifulSoup爬取网页信息

    BeautifulSoup是一个Python库,用于解析HTML和XML文档,并提供了一些方便的方法来获取和操作文档中的元素。本文将详细讲解如何使用BeautifulSoup库爬取网页信息,包括两个示例。 示例一:爬取单个元素 以下是一个示例代码,演示如何使用BeautifulSoup库爬取单个元素: import requests from bs4 imp…

    python 2023年5月15日
    00
  • 获取与请求不一致的频道 ID(python)

    【问题标题】:Get Channel Id discord with request (python)获取与请求不一致的频道 ID(python) 【发布时间】:2023-04-06 14:58:01 【问题描述】: def send_dm(): token = ‘i know, just not putting my token here’ message…

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