今天就跟大家聊聊有關(guān)如何在Python中使用locals函數(shù),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)新寧,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792相同屬性不相鄰問題
需求:有兩個(gè)list,分別為list1和list2。list1中有n個(gè)對(duì)象,每個(gè)對(duì)象有5個(gè)屬性,其中一個(gè)屬性是tid,要求list1按tid排序,相鄰的對(duì)象的tid不能重復(fù),m為不重復(fù)的tid數(shù)量,m不確定。list2存放的是所有可能出現(xiàn)的tid的情況。
list1 = [task1,task2,task3…taskn]
list2 = [tid1,tid2,tid3…tidm] (m
神奇的local函數(shù)
python語(yǔ)言很好的幫我們解決了這個(gè)問題:利用locals內(nèi)置函數(shù)動(dòng)態(tài)創(chuàng)建變量。
locals函數(shù)在這里的作用:
- 1、根據(jù)傳遞的參數(shù)動(dòng)態(tài)創(chuàng)建變量
- 2、根據(jù)傳遞的參數(shù)動(dòng)態(tài)訪問變量
demo
def apart_program_by_task(list1,list2): list_all_pro = [] #動(dòng)態(tài)創(chuàng)建m個(gè)list,命名為'list'+str(tidm) for i in list2: locals()['list'+str(i)] = [] #拿到每個(gè)對(duì)象,獲取其tid的值,通過拼接變量名訪問對(duì)應(yīng)的list,并把該對(duì)象加入該list for i in list1: locals()['list'+str(i.tid)].append(i) #循環(huán)訪問m個(gè)list的每個(gè)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
這個(gè)demo中,我們可以很靈活的根據(jù)list2的長(zhǎng)度動(dòng)態(tài)創(chuàng)建len(list2)個(gè)list,然后根據(jù)拼接變量名訪問每個(gè)list,從而做到按tid歸類。
在回收所有的list時(shí),我們也是通過拼接變量名挨個(gè)訪問每個(gè)list一次,取到頭元素加入新的list,來保證新的list中的相鄰對(duì)象的tid不相同。
更多
為什么locals函數(shù)可以動(dòng)態(tài)創(chuàng)建和訪問變量,這里我們必須先介紹python的命名空間。
局部命名空間local:每個(gè)函數(shù)自己的命名空間,記錄函數(shù)的參數(shù)和局部變量。
全局命名空間global:每個(gè)模塊自己的命名空間,記錄了函數(shù)、類、導(dǎo)入的模塊的變量以及常量。
命令空間創(chuàng)建順序:
python解釋器啟動(dòng) ->創(chuàng)建內(nèi)建命名空間 -> 加載模塊 -> 創(chuàng)建全局命名空間 ->函數(shù)被調(diào)用 ->創(chuàng)建局部命名空間
而locals的作用,就是以字典的形式,返回當(dāng)前函數(shù)內(nèi)變量名和變量值,比如:
def func(a = 1): b = 2 print(locals()) return a+b func() # {'b': 2, 'a': 1}
這就可以解釋動(dòng)態(tài)訪問變量的原理了,就像訪問字典一樣,比如我們要根據(jù)key訪問字典的值,只需要
dict = {'b': 2, 'a': 1} print(dict["b"])
所以,locals()[變量名]
即可動(dòng)態(tài)訪問當(dāng)前函數(shù)內(nèi)的變量名,而locals()[“l(fā)ist101”] = [] 也可以動(dòng)態(tài)創(chuàng)建數(shù)組,等價(jià)于 list101 = []
但是locals只能訪問所在函數(shù)內(nèi)部的變量,且不可修改,要訪問全局變量or修改,則需要使用globals函數(shù)。
python的數(shù)據(jù)類型有哪些?python的數(shù)據(jù)類型:1. 數(shù)字類型,包括int(整型)、long(長(zhǎng)整型)和float(浮點(diǎn)型)。2.字符串,分別是str類型和unicode類型。3.布爾型,Python布爾類型也是用于邏輯運(yùn)算,有兩個(gè)值:True(真)和False(假)。4.列表,列表是Python中使用最頻繁的數(shù)據(jù)類型,集合中可以放任何數(shù)據(jù)類型。5. 元組,元組用”()”標(biāo)識(shí),內(nèi)部元素用逗號(hào)隔開。6. 字典,字典是一種鍵值對(duì)的集合。7. 集合,集合是一個(gè)無序的、不重復(fù)的數(shù)據(jù)組合。
看完上述內(nèi)容,你們對(duì)如何在Python中使用locals函數(shù)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。