Python神奇的内置函数locals的实例讲解


Posted in Python onFebruary 22, 2019

摘要

  • 本文我们介绍神奇的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 相关文章推荐
python snownlp情感分析简易demo(分享)
Jun 04 Python
python中实现精确的浮点数运算详解
Nov 02 Python
tensorflow中next_batch的具体使用
Feb 02 Python
python3爬虫之设计签名小程序
Jun 19 Python
python与caffe改变通道顺序的方法
Aug 04 Python
在Python中获取两数相除的商和余数方法
Nov 10 Python
用Python PIL实现几个简单的图片特效
Jan 18 Python
Python Excel处理库openpyxl使用详解
May 09 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
Python3 实现减少可调用对象的参数个数
Dec 20 Python
tensorflow 只恢复部分模型参数的实例
Jan 06 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
Sep 22 Python
Python玩转Excel的读写改实例
Feb 22 #Python
Python操作配置文件ini的三种方法讲解
Feb 22 #Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 #Python
python调用虹软2.0第三版的具体使用
Feb 22 #Python
Python实现图片转字符画的代码实例
Feb 22 #Python
Python中正则表达式的用法总结
Feb 22 #Python
python ddt数据驱动最简实例代码
Feb 22 #Python
You might like
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
javascript document.compatMode兼容性
2010/02/23 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
使用不同的方法结合/合并两个JS数组
2014/09/18 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
使用impress.js制作幻灯片
2015/09/09 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
简单介绍Python中利用生成器实现的并发编程
2015/05/04 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
Django学习之文件上传与下载
2019/10/06 Python
wxPython实现整点报时
2019/11/18 Python
Python requests.post方法中data与json参数区别详解
2020/04/30 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
CSS3 函数技巧 用css 实现js实现的事情(clac Counters Tooltip)
2017/08/15 HTML / CSS
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
周鸿祎:教你写创业计划书
2013/12/30 职场文书
女儿十岁生日答谢词
2014/01/27 职场文书
员工培训邀请函
2014/02/02 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
酒店总经理职务说明书
2014/02/26 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
实习生辞职信范文
2015/03/02 职场文书
施工员岗位职责范本
2015/04/11 职场文书
商务宴会祝酒词
2015/08/11 职场文书