Python内置函数locals动态创建与访问变量的实战应用

拾光
拾光
发布时间:2026-10-13| 9人浏览过
原创

本文深入解析Python内置函数locals的机制,展示如何利用其动态创建和访问变量的特性解决复杂数据处理问题。通过一个按tid排序且相邻元素不重复的列表重组案例,结合局部与全局命名空间原理,详细演示了动态生成变量及操作列表的具体实现代码与逻辑。

摘要

  • 本文重点介绍Python中功能强大的locals函数,详细阐述如何利用它动态创建变量和动态访问变量,并结合一个具体的业务场景进行代码演示。

相同属性不相邻问题

需求描述:假设有两个列表,分别为list1和list2。list1包含n个对象,每个对象拥有5个属性,其中关键属性为tid。目标是将list1按tid进行排序,并确保排序后相邻对象的tid值不重复。这里m表示不重复tid的数量,且m的具体数值是不确定的。list2用于存储所有可能出现的tid值集合。

  • list1 = [task1,task2,task3…taskn]
  • list2 = [tid1,tid2,tid3…tidm] (m

神奇的local函数

Python语言通过内置的locals函数很好地解决了上述动态变量处理的问题。

在此场景下,locals函数的主要作用体现在以下两点:

  • - 1、根据传递的参数动态创建变量
  • - 2、根据传递的参数动态访问变量

demo

def apart_program_by_task(list1,list2):
  list_all_pro = []
  #动态创建m个list,命名为'list'+str(tidm)
  for i in list2:
    locals()['list'+str(i)] = []
  #拿到每个对象,获取其tid的值,通过拼接变量名访问对应的list,并把该对象加入该list
  for i in list1:
    locals()['list'+str(i.tid)].append(i)
  #循环访问m个list的每个list的头元素,并删除,然后加入list_all_pro
  while 1:
    flag = False
    for i in list2:
      try:
        pro = locals()['lst'+str(i)].pop()
        list_all_pro.append(pro)
        flag = True
      except:
        pass
    if flag == False:
      break
  return list_all_pro  

在该示例中,我们可以灵活地根据list2的长度,动态创建出len(list2)个列表变量。随后,通过拼接变量名的方式访问这些动态创建的列表,从而实现按tid对对象进行归类存储。

在回收所有动态创建的列表时,我们通过拼接变量名逐个访问每个列表,依次取出头元素并加入新的结果列表list_all_pro中。这一过程确保了新列表中相邻对象的tid值始终保持不相同。

更多

为什么locals函数能够实现动态创建和访问变量?要理解这一点,必须先了解Python的命名空间机制。

  • 局部命名空间(local):每个函数拥有独立的命名空间,用于记录该函数的参数和局部变量。
  • 全局命名空间(global):每个模块拥有独立的命名空间,记录了该模块中定义的函数、类、导入的模块变量以及常量。
  • 命名空间的创建顺序如下:

Python解释器启动 -> 创建内建命名空间 -> 加载模块 -> 创建全局命名空间 -> 函数被调用 -> 创建局部命名空间

locals函数的作用是以字典的形式,返回当前函数作用域内的变量名及其对应的值。例如:

def func(a = 1):
  b = 2
  print(locals())
  return a+b
func()  # {'b': 2, 'a': 1}

这解释了动态访问变量的原理,其操作方式类似于访问字典。例如,若要根据key访问字典的值,只需执行以下操作:

dict = {'b': 2, 'a': 1}
print(dict["b"])

因此,通过locals()[变量名] 即可动态访问当前函数作用域内的变量名;同时,执行locals()[“list101”] = []也可以动态创建数组,这完全等价于直接编写list101 = []。

需要注意的是,locals函数只能访问所在函数内部的变量,且通常不建议直接修改其返回的字典。若要访问或修改全局变量,则需要使用globals函数。

总结

以上就是本文的全部内容,希望本文关于Python locals函数的解析对大家的学习或工作具有一定的参考价值。感谢大家对本站的支持。如果你想了解更多相关内容,请查看下面相关链接

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。