每日一課 | python 動態(tài)生成變量名以及動態(tài)獲取變量的變量名

【導語】:必須現(xiàn)在需要動態(tài)創(chuàng)建16個list,每個list的名字不一樣,但是是有規(guī)律可循,比如第一個list的名字叫:arriage_list_0=[],第二個叫arriage_list_1=[]……..依次類推,但是我又不想手動的去寫16個這樣的名字,太累了,而且增加了代碼的冗余性,靈活性也不強,所以有沒有一種方法是能動態(tài)創(chuàng)建list名稱的呢?答案是有的!而與之對應,既然要對上面的列表動態(tài)操作,肯定是少不了動態(tài)去解析list名稱。所以下面開始介紹方法。

一、python 動態(tài)生成變量名 —— locals()

代碼之前,先介紹一個函數(shù):
locals() 函數(shù)會以字典類型返回當前位置的全部局部變量。

# 兩個局部變量:arg、z
def runoob(arg):
    z = 1
    print(locals())
runoob(4)

結果:{'arg': 4, 'z': 1}

下面動態(tài)創(chuàng)建名字為list_0到list_15的16個list列表:

def test_list_pre():
    prepare_list = locals()
    for i in range(16):
        prepare_list['list_' + str(i)] = []
        prepare_list['list_' + str(i)].append(('我是第' + str(i)) + '個list')
    print(prepare_list['list_0'])
    print(prepare_list['list_1'])
    print(prepare_list['list_2'])
    print(prepare_list['list_3'])

if __name__ == '__main__':
    test_list_pre()

結果:
['我是第0個list']
['我是第1個list']
['我是第2個list']
['我是第3個list']

實際證明,已經(jīng)動態(tài)的每次往list插入了值

二、動態(tài)獲取變量的變量名

如果有了上面的動態(tài)命名list,那么當動態(tài)獲取變量的變量名,就需要如下的操作:
利用python原生的inspect庫來實現(xiàn)

def get_variable_name(variable):
    callers_local_vars = inspect.currentframe().f_back.f_locals.items()
    return [var_name for var_name, var_val in callers_local_vars if var_val is variable]


if __name__ == '__main__':
    prepare_list = locals()
    for i in range(16):
        prepare_list['list_' + str(i)] = []
        prepare_list['list_' + str(i)].append(('我是第' + str(i)) + '個list')
    a = get_variable_name(prepare_list['list_0']).pop()
    b = get_variable_name(prepare_list['list_1']).pop()
    print(a)
    print(b)

結果:
list_0
list_1

希望本文的內容對大家的學習或者工作能帶來一定的幫助,每天進步一點點,加油。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容