python内置函数使用方法(Python神奇的内置函数locals的实例讲解)
python内置函数使用方法
Python神奇的内置函数locals的实例讲解摘要
- 本文我们介绍神奇的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函数。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/lk7688535/article/details/80986753
- 用python制作一个简单的小程序(一个可以套路别人的python小程序实例代码)
- python设置微信(利用python实现在微信群刷屏的方法)
- python 微信发天气信息(python微信聊天机器人改进版定时或触发抓取天气预报、励志语录等,向好友推送)
- python开源协议简介(对python 自定义协议的方法详解)
- python语句for循环(Python基础之循环语句用法示例for、while循环)
- python socket 库(Pythony运维入门之Socket网络编程详解)
- python正则表达式入门(Python正则表达式实现简易计算器功能示例)
- pythonflask编写接口(Python Flask框架模板操作实例分析)
- python分步式进程计算(python中如何使用分步式进程计算详解)
- pythonpandas提取列索引(Python3.5 Pandas模块缺失值处理和层次索引实例详解)
- python中的类和对象的定义和使用(Python类的继承、多态及获取对象信息操作详解)
- ipython命令行查看文件夹(对IPython交互模式下的退出方法详解)
- pythonopencv自定义阈值算法(理想高通滤波实现Python opencv示例)
- python怎么从数组中取内容(python调用c++ ctype list传数组或者返回数组的方法)
- 时间日期python实例(Python之时间和日期使用小结)
- python小程序编程代码(python实现烟花小程序)
- 观花盆栽佛肚竹盆景制作及养护(观花盆栽佛肚竹盆景制作及养护)
- 春天养佛肚竹,做好这几件事,叶绿根壮寓意好 越养越旺家(春天养佛肚竹做好这几件事)
- 律界衣品最好,时尚圈学识数高,41岁的Amal堪称现实版的傲骨贤妻(时尚圈学识数高)
- 刘智泰确认出演《Good Wife》 担纲男一号(刘智泰确认出演Good)
- 《傲骨之战》剧终 律政女魔头Diane,为什么是大女主天花板(傲骨之战剧终律政女魔头Diane)
- 汉族(汉族的祖先是谁)
热门推荐
- echarts 高级图表教程(Echarts图例组件的属性与源代码)
- python规定输入值的最大值(实例讲解Python中整数的最大值输出)
- php7.4编译安装(PHP7.3.10编译安装教程)
- vue前端搜索功能如何实现(使用Vue3+Vant组件实现App搜索历史记录功能示例代码)
- h5获取ios系统版本(详解h5页面在不同ios设备上的问题总结)
- jquery判断是否显示或隐藏
- vuejs过滤器使用教程(vue3删除过滤器的原因)
- vue怎么实现倒计时(Vue计时器的用法详解)
- linux telnet命令使用(Linux telnet命令的使用)
- pyqt5信号槽编辑器(浅谈pyqt5中信号与槽的认识)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9