Python神奇的內建函式locals的例項講解

2021-09-20 04:03:44 字數 1646 閱讀 8893

摘要

相同屬性不相鄰問題

需求:有兩個list,分別為list1和list2。list1中有n個物件,每個物件有5個屬性,其中乙個屬性是tid,要求list1按tid排序,相鄰的物件的tid不能重複,m為不重複的tid數量,m不確定。list2存放的是所有可能出現的tid的情況。

神奇的local函式

python語言很好的幫我們解決了這個問題:利用locals內建函式動態建立變數。

locals函式在這裡的作用:

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:

#迴圈訪問m個list的每個list的頭元素,並刪除,然後加入list_all_pro

while 1:

flag = false

for i in list2:

try:

pro = locals()['lst'+str(i)].pop()

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的命名空間。

python直譯器啟動 ->建立內建命名空間 -> 載入模組 -> 建立全域性命名空間 ->函式被呼叫 ->建立區域性命名空間

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

def func(a = 1):

b = 2

print(locals())

return a+b

func() #

這就可以解釋動態訪問變數的原理了,就像訪問字典一樣,比如我們要根據key訪問字典的值,只需要

dict = 

print(dict["b"])

所以,locals()[變數名]即可動態訪問當前函式內的變數名,而locals()[「list101」] = 也可以動態建立陣列,等價於 list101 =

但是locals只能訪問所在函式內部的變數,且不可修改,要訪問全域性變數or修改,則需要使用globals函式。

Python神奇的內建函式locals的例項講解

摘要 相同屬性不相鄰問題 需求 有兩個list,分別為list1和list2。list1中有n個物件,每個物件有5個屬性,其中乙個屬性是tid,要求list1按tid排序,相鄰的物件的tid不能重複,m為不重複的tid數量,m不確定。list2存放的是所有可能出現的tid的情況。神奇的local函式...

python中的lo函式 Python 函式

函式 內建函式 print input len type print hello world 函式 引數 定義函式 def greet name print name 早上好 return 第一行def的意思是定義 define greet是 函式名 自己取的 再搭配乙個括號和冒號,括號裡面的nam...

python內建函式 python的內建函式 方法

1 input 輸入內容時要將內容用引號引起來 input 請輸入密碼 input 請輸入登入名 name input 請輸入姓名 print hello,name 請輸入姓名 binla hello,binla 在列表後邊追加乙個元素 3 extend 在列表之後追加乙個列表 4 insert 位...