溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Python中使用locals函數(shù)

發(fā)布時間:2021-05-18 16:11:54 來源:億速云 閱讀:359 作者:Leah 欄目:開發(fā)技術

今天就跟大家聊聊有關如何在Python中使用locals函數(shù),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據(jù)這篇文章可以有所收獲。

相同屬性不相鄰問題

需求:有兩個list,分別為list1和list2。list1中有n個對象,每個對象有5個屬性,其中一個屬性是tid,要求list1按tid排序,相鄰的對象的tid不能重復,m為不重復的tid數(shù)量,m不確定。list2存放的是所有可能出現(xiàn)的tid的情況。

  • list1 = [task1,task2,task3…taskn]

  • list2 = [tid1,tid2,tid3…tidm] (m

神奇的local函數(shù)

python語言很好的幫我們解決了這個問題:利用locals內置函數(shù)動態(tài)創(chuàng)建變量。

locals函數(shù)在這里的作用:

  • - 1、根據(jù)傳遞的參數(shù)動態(tài)創(chuàng)建變量

  • - 2、根據(jù)傳遞的參數(shù)動態(tài)訪問變量

demo

def apart_program_by_task(list1,list2):
  list_all_pro = []
  #動態(tài)創(chuàng)建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)
  #循環(huán)訪問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中,我們可以很靈活的根據(jù)list2的長度動態(tài)創(chuàng)建len(list2)個list,然后根據(jù)拼接變量名訪問每個list,從而做到按tid歸類。

在回收所有的list時,我們也是通過拼接變量名挨個訪問每個list一次,取到頭元素加入新的list,來保證新的list中的相鄰對象的tid不相同。

更多

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

  • 局部命名空間local:每個函數(shù)自己的命名空間,記錄函數(shù)的參數(shù)和局部變量。

  • 全局命名空間global:每個模塊自己的命名空間,記錄了函數(shù)、類、導入的模塊的變量以及常量。

  • 命令空間創(chuàng)建順序:

python解釋器啟動 ->創(chuàng)建內建命名空間 -> 加載模塊 -> 創(chuàng)建全局命名空間 ->函數(shù)被調用 ->創(chuàng)建局部命名空間

而locals的作用,就是以字典的形式,返回當前函數(shù)內變量名和變量值,比如:

def func(a = 1):
  b = 2
  print(locals())
  return a+b
func()  # {'b': 2, 'a': 1}

這就可以解釋動態(tài)訪問變量的原理了,就像訪問字典一樣,比如我們要根據(jù)key訪問字典的值,只需要

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

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

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

python的數(shù)據(jù)類型有哪些?

python的數(shù)據(jù)類型:1. 數(shù)字類型,包括int(整型)、long(長整型)和float(浮點型)。2.字符串,分別是str類型和unicode類型。3.布爾型,Python布爾類型也是用于邏輯運算,有兩個值:True(真)和False(假)。4.列表,列表是Python中使用最頻繁的數(shù)據(jù)類型,集合中可以放任何數(shù)據(jù)類型。5. 元組,元組用”()”標識,內部元素用逗號隔開。6. 字典,字典是一種鍵值對的集合。7. 集合,集合是一個無序的、不重復的數(shù)據(jù)組合。

看完上述內容,你們對如何在Python中使用locals函數(shù)有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI