亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Python怎么將字符串常量轉化為變量

發布時間:2022-01-17 17:26:48 來源:億速云 閱讀:138 作者:iii 欄目:互聯網科技

本篇內容主要講解“Python怎么將字符串常量轉化為變量”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python怎么將字符串常量轉化為變量”吧!

1、如何動態生成變量名?

M 同學的問題如下:

打擾一下大家,請教一個問題,已知 list = ['A', 'B', 'C', 'D'] , 如何才能得到以 list 中元素命名的新列表 A = [], B = [], C = [], D = [] 呢?

簡單理解,這個問題的意思是,將字符串內容作為其它對象的變量名。

list 中的元素是字符串,此處的 ‘A’-‘D’ 是常量 ,而在要求的結果中,A-D 是變量 。

如果強行直接將常量當做變量使用,它會報錯:

 >>> 'A' = []

 ...SyntaxError: can't assign to literal

報錯中的literal 指的是字面量 ,這是計算機科學中常見的一個概念,用于表達源代碼中的固定值。 例如,整數、浮點數、字符串等基本類型,就是字面量。

字面量指的就是一個量本身,可以理解為一種原子性的實體,當然不能再被賦值了。

所以,取出的字符串內容,并不能直接用作變量名,需要另想辦法。

有初學者可能會想,list[0] = [] 行不行?當然不行,因為沒有出現 A 。那 A = list[0] ,接著 A = [] 呢?那也不行,因為這里的 A 是你憑空定義出來的,而不是從已有條件中生成的。

當時,群里只有兩三個同學參與了討論,我們沒想到解決辦法。但是,我覺得這個題目很有意思,值得玩味。

因為,如果能解決這個問題,那就意味著可以不作預先定義,而是動態地生成變量名,這不僅能減少給變量取名的麻煩,還實現了自動編碼!

可以設想一下未來,人工智能在編寫代碼的時候,如果能根據已知條件,動態生成變量名,那編寫代碼的過程不就順利多了么?(據說,現在已經有人工智能可以編寫代碼了,不知它在取變量名時,是用的什么方法?)

2、辦法總是有的

最近,學習群里蒙混進來了幾個打廣告的,為此,我決定提高審核門檻,例如,用群里的問題來作個考核。

萬萬沒想到的是,第一個被考核到的 Q 同學,幾乎不假思索地就說出了一個解決上述問題的思路。而偏偏就是那么巧 ,幾乎在同時,群內的 J 同學給出了另外一個解決方法(他沒看到群內的討論,而是看到了知識星球的記錄,才知道這個問題的)。

也就是說,前一晚還以為無解的問題,在第二天竟得到了兩種不同的解決方法!

那么,他們的答案是什么呢?

 

 # J 同學的解答

 >>> list1 = ['A', 'B', 'C', 'D']

 >>> for i in list1:

 >>> globals()[i] = []

 >>> A

 []

這個方法通過修改全局命名空間,巧妙地“定義”出了新的變量。globals() 方法取出來的是一個字典,字符串 ‘A’ 是其中一個鍵值(key),而這個鍵值恰恰是全局命名空間中的一個變量,這就實現了從常量到變量的轉化。

在數據結構層面上,空列表 [] 作為一個值(value)跟它的字符串鍵值綁定在一起,而在運用層面上,它作為變量內容而跟變量名綁定在一起。

3、動態執行代碼的方法

新進群的 Q 同學,提供了一個不同的答案:

 

 # Q 同學的解答

 >>> list1 = ['A', 'B', 'C', 'D']

 >>> for i in list1:

 >>> exec(f"{i} = []")

 >>> A

 []

他的寫法用到了 Python 3.6 才引入的 f-strings 特性,事實上,在較低版本中,也是可以實現的,只需要保證 exec() 方法接收的參數是包含了變量 i 的字符串即可,例如這樣寫:

 

 # 以下代碼可替換上例的第 4 行

 exec(i + " = []")

 # 或者:

 exec("{} = []".format(i))

 # 或者:

 exec(' '.join([i, '= []']))

這幾種寫法的區別只是字符串拼接法的區別,關于如何拼接字符串,以及不同方法之間的區別,可參看《詳解Python拼接字符串的七種方式》。

Q 同學這個答案的核心在于 exec() 方法,它是內置的,用途是執行儲存在字符串或文件中的代碼段。

它的基礎用法如下:

 >>> exec('x = 1 + 2')

 >>> x

 3

 

 # 執行代碼段

 >>> s = """

 >>> x = 10

 >>> y = 20

 >>> sum = x + y

 >>> print(sum)

 >>> """

 >>> exec(s)

 30

看完了 exec() 的用法,我們再回來看 Q 同學的答案。for-循環中取出來的 i 是字符串,而拼接后的字符串經過 exec() 的處理,就獲得了動態編寫代碼的效果。

也就是說,因為字符串常量的內容被當做有效代碼而執行了,其中的 'A'-'D' 元素,就取得了新的身份,變成了最終的 A-D 變量名。

這個方法看起來很簡單啊,可是由于 exec() 方法太生僻了,直到 Q 同學提出,我們才醒悟過來。

注意:在 Python3 中,exec() 是個內置方法;而在 Python2 中,exec 是個語句(statement),另外有個 execfile() 方法,兩者相合并,就成了 Python3 中的 exec() 方法。本文使用的是 Python3。

到此,相信大家對“Python怎么將字符串常量轉化為變量”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

营口市| 绥宁县| 格尔木市| 定州市| 丹江口市| 新疆| 吴堡县| 辛集市| 遵化市| 前郭尔| 屯门区| 海南省| 南陵县| 阿图什市| 秀山| 随州市| 利辛县| 宜兰市| 禹城市| 柳林县| 潜江市| 宜宾县| 长海县| 拜泉县| 宁陵县| 绥阳县| 河东区| 永清县| 西藏| 天峻县| 色达县| 玉树县| 中西区| 陕西省| 普格县| 公安县| 四会市| 永嘉县| 南开区| 沅陵县| 江源县|