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
- docker下运行python3(使用Docker+jenkins+python3环境搭建超详细教程)
- 用python画圣诞树送给女朋友(情人节快乐! python绘制漂亮玫瑰花)
- python实现列表删除重复元素(Python代码实现删除一个list里面重复元素的方法)
- python 从入门到实践笔记(python基础梳理一推荐)
- python条形码识别(python3转换code128条形码的方法)
- python字符串找一个最大字符(Python查找最长不包含重复字符的子字符串算法示例)
- python将网站图片本地存储(详解Python下载图片并保存本地的两种方式)
- 如何查看python是否安装selenium(selenium+python截图不成功的解决方法)
- python八卦图(Python实现九宫格式的朋友圈功能内附“马云”朋友圈)
- 笨办法学python3目录(如何愉快地迁移到 Python 3)
- python列表精讲33节(Python列表知识应知应会)
- python3.7保存文件(详解用python实现基本的学生管理系统文件存储版python3)
- python用pyqt5制作登录界面(python3+pyqt5+itchat微信定时发送消息的方法)
- python装饰器怎么编写(Python函数装饰器常见使用方法实例详解)
- python解析csv文件存到数据库(python读取csv和txt数据转换成向量的实例)
- python为什么要用多进程(对Python的多进程锁的使用方法详解)
- 今日菜价 芥兰涨幅最高 1.33 ,花菜降幅最高 3.10(今日菜价芥兰涨幅最高)
- 今日菜价 椰菜涨幅最高 3.25 ,水空心菜降幅最高 2.58(今日菜价椰菜涨幅最高)
- 今日菜价 红三鱼涨幅最高 4.41 ,黄鳝降幅最高 5.06(红三鱼涨幅最高)
- 今日菜价 西生菜涨幅最高 6.19 ,生菜降幅最高 5.38(西生菜涨幅最高)
- 今日菜价 青豆角涨幅最高 0.70 ,菜心降幅最高 5.55(青豆角涨幅最高)
- 农村植物,龙芽草若长在您家路旁,请珍惜,它对抗癌有特效(龙芽草若长在您家路旁)
热门推荐
- dedecms更新后设置不显示(dedecms中tags页面显示错位的解决方法)
- sqlserver降序排列(SQL SERVER临时表排序问题的解决方法)
- python菜单栏中常用的菜单(Python3实现的简单三级菜单功能示例)
- mysql顺序排序(Mysql 中文排序规则说明)
- mysql中delete聚合函数查询值(MySQL 分组查询和聚合函数)
- css伪元素是属性吗(CSS :befor :after 伪元素的巧妙用法)
- mysql索引的弊端(MySQL 全文索引的原理与缺陷)
- python 文本分析 摘要(用Python逐行分析文件方法)
- docker打包镜像命令(docker 打包本地镜像,并到其他机器进行恢复操作)
- docker查找redis配置文件(解决docker重启redis,mysql数据丢失的问题)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9