最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python神奇的內(nèi)置函數(shù)locals的實(shí)例講解

 更新時(shí)間:2019年02月22日 16:36:30   作者:lk7688535  
今天小編就為大家分享一篇關(guān)于Python神奇的內(nèi)置函數(shù)locals的實(shí)例講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

摘要

  • 本文我們介紹神奇的locals函數(shù),包括動(dòng)態(tài)創(chuàng)建變量和動(dòng)態(tài)訪問(wèn)變量,以及一個(gè)應(yīng)用場(chǎng)景。

相同屬性不相鄰問(wèn)題

需求:有兩個(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è)問(wèn)題:利用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)訪問(wèn)變量

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的值,通過(guò)拼接變量名訪問(wèn)對(duì)應(yīng)的list,并把該對(duì)象加入該list
  for i in list1:
    locals()['list'+str(i.tid)].append(i)
  #循環(huán)訪問(wè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ù)拼接變量名訪問(wèn)每個(gè)list,從而做到按tid歸類(lèi)。

在回收所有的list時(shí),我們也是通過(guò)拼接變量名挨個(gè)訪問(wèn)每個(gè)list一次,取到頭元素加入新的list,來(lái)保證新的list中的相鄰對(duì)象的tid不相同。

更多

為什么locals函數(shù)可以動(dòng)態(tài)創(chuàng)建和訪問(wèn)變量,這里我們必須先介紹python的命名空間。

  • 局部命名空間local:每個(gè)函數(shù)自己的命名空間,記錄函數(shù)的參數(shù)和局部變量。
  • 全局命名空間global:每個(gè)模塊自己的命名空間,記錄了函數(shù)、類(lèi)、導(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)訪問(wèn)變量的原理了,就像訪問(wèn)字典一樣,比如我們要根據(jù)key訪問(wèn)字典的值,只需要

dict = {'b': 2, 'a': 1}
print(dict["b"])

所以,locals()[變量名] 即可動(dòng)態(tài)訪問(wèn)當(dāng)前函數(shù)內(nèi)的變量名,而locals()[“l(fā)ist101”] = [] 也可以動(dòng)態(tài)創(chuàng)建數(shù)組,等價(jià)于 list101 = []

但是locals只能訪問(wèn)所在函數(shù)內(nèi)部的變量,且不可修改,要訪問(wèn)全局變量or修改,則需要使用globals函數(shù)。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

最新評(píng)論

彭山县| 鄄城县| 寿宁县| 南汇区| 普格县| 疏勒县| 全州县| 乌鲁木齐县| 德昌县| 高陵县| 安徽省| 西宁市| 封丘县| 读书| 阳山县| 新化县| 孟连| 紫金县| 乳源| 武陟县| 平凉市| 湖北省| 宁远县| 酉阳| 贵德县| 云南省| 历史| 鲁甸县| 晴隆县| 永宁县| 叙永县| 陆河县| 锦州市| 清徐县| 鄂托克旗| 平邑县| 乐平市| 磴口县| 双城市| 裕民县| 静乐县|