摘要

本文我们介绍神奇的locals函数,包括动态创建变量和动态访问变量,以及一个应用场景。

相同属性不相邻问题

需求:有两个list,分别为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

这个demo中,我们可以很灵活的根据list2的长度动态创建len(list2)个list,然后根据拼接变量名访问每个list,从而做到按tid归类。

在回收所有的list时,我们也是通过拼接变量名挨个访问每个list一次,取到头元素加入新的list,来保证新的list中的相邻对象的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只能访问所在函数内部的变量,且不可修改,要访问全局变量or修改,则需要使用globals函数。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

本文标题: Python神奇的内置函数locals的实例讲解

本文地址: http://www.cppcns.com/jiaoben/python/253036.html

python中locals函数_Python神奇的内置函数locals的实例讲解相关推荐

  1. Python中lambda详解(包括内置函数map、reduce、filter、sorted、max)

    文章目录 一.lambda是什么? 1.lambda语法 2.语法详解 二.lambda的使用 1.定义 2.调用 3.替换 4.作返回值 三.lambda作参数 1.map函数 2.reduce函数 ...

  2. python中globals用法_Python基础教程之内置函数locals()和globals()用法分析

    本文实例讲述了Python基础教程之内置函数locals()和globals()用法.分享给大家供大家参考,具体如下: 1. 这两个函数主要提供,基于字典的访问局部变量和全局变量的方式. python ...

  3. python update函数会调用哪些内置函数_Python字典的内置函数中没有 append()操作,可以用 update()来更新字典内容...

    Python字典的内置函数中没有 append()操作,可以用 update()来更新字典内容 答:√ 在同一代昭穆的兄弟中,以年岁序位. 答:对 <舆服志>主要描写了唐代的流行服饰样式, ...

  4. python一共有多少个内置函数_Python 35个内置函数,你都ok吗?

    Python一共有60多个内置函数,今天先梳理其中35 个 1 abs() 绝对值或复数的模 In [1]: abs(-6) Out[1]: 6 . 2 all() 接受一个迭代器,如果迭代器的所有元 ...

  5. python常见内置函数_python常见的内置函数

    函数分为自定义函数和内置函数 python内置函数分类: 一.强制转换int() / str() / bool() / list() / tuple() / dict() / set() 二.输入输出 ...

  6. Python中堪称神仙的六个内置函数

    人生苦短,菜鸟学Python! 今天,我们会一次性分享6个堪称神仙的内置函数.在很多计算机书籍中,它们也通常作为高阶函数来介绍.而我自己在日常工作中,经常使用它们来使代码更快,更易于理解. Lambd ...

  7. Python 中堪称神仙的6个内置函数

    大家好,之前给大家分享过3个节省时间的Python技巧,当时就提出了,建议大家多使用Python的内置函数,既能提高自己的Python程序速度,同时还能保持代码简洁易懂. 今天,我会一次性分享6个堪称 ...

  8. python中的True和False以及内置函数any()、all()

    文章目录 1.内置函数all().any() 2.python中哪些元素是真True,哪些元素是假False 3.python中的None对象 4.python中的布尔(bool)值 5.内置函数al ...

  9. Python中几个操作列表的内置函数filter(),map(),reduce(),lambda

    Python内置了一些非常有趣但非常有用的函数,充分体现了Python的语言魅力! filter(function, sequence):对sequence中的item依次执行function(ite ...

最新文章

  1. 苏子怡:大数据思维融入建筑节能 | 提升之路系列
  2. linux自动对齐命令,linux查看硬盘4K对齐方法
  3. 运行java程序时找不到_基本Java运行时程序找不到python
  4. SAP CRM 产品主数据搜索时的权限检查实现 - Product search authorization check
  5. java写入单个字符_将2个字符写入单个Java char
  6. 数据结构实验之查找一:二叉排序树
  7. Linux下进程隐藏的常见手法及侦测手段
  8. 使用Axure创建iPhone应用程序原型(二)
  9. dcmtk编译 android,Win10编译Android可用的DCMTK-SO库
  10. java flv 转swf_nginx-http-flv-module flv拉流错误整理
  11. wmic memorychip
  12. 如何利用Python进行数据分析
  13. C语言switch史上最详细的讲解
  14. php errorcode,errorCode.php
  15. 细菌的天敌抗生素,如何利用这把救命的双刃剑?
  16. 金蝶软件核算项目的介绍及使用
  17. CentOS7 忘记密码——重置
  18. 崩坏3服务器维护多久,崩坏34月25日停机维护到几点_4月25日崩坏3停机维护时间_玩游戏网...
  19. ApowerREC 1.2.4破解版 亲测能用
  20. Intel NUC8i5BEH安装Windows10+Hackintosh双系统

热门文章

  1. matlab图像边缘检测分析
  2. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 4丨员工薪水中位数【难度困难】
  3. Java加密与解密的艺术~数字证书~证书管理openssl
  4. mysql 5.7 not null_mysql5.7基础 select...where...is not null 查找不为NULL的内容
  5. 追加的英文计算机,Latex同时添加中英文摘要
  6. Socket通用TCP通信协议设计及实现(防止粘包,可移植,可靠)
  7. 通过VirtualQuery获取当前模块的句柄
  8. SpringMVC获取response的问题
  9. 现代软件工程 10 绩效管理
  10. 嵌套饼图_你真的了解matplotlib吗?---环形图