您好,登录后才能下订单哦!
今天就跟大家聊聊有关如何在Python中使用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的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(浮点型)。2.字符串,分别是str类型和unicode类型。3.布尔型,Python布尔类型也是用于逻辑运算,有两个值:True(真)和False(假)。4.列表,列表是Python中使用最频繁的数据类型,集合中可以放任何数据类型。5. 元组,元组用”()”标识,内部元素用逗号隔开。6. 字典,字典是一种键值对的集合。7. 集合,集合是一个无序的、不重复的数据组合。
看完上述内容,你们对如何在Python中使用locals函数有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。