摘要:二高級賦值語句何為高級賦值語句就是常規的賦值方法進行操作是會報錯的,得進行一些更高級一點的操作。小技巧三舉例用賦值語句把列表進行每次減少個元素并輸出列表。
從Python基礎到高級編程學完,基本上Python入門的知識就已經學完了,為了給更多學完Python入門要過度到Python進階方向(比如爬蟲/后端/數據分析等等)的新手鞏固好基礎知識,專門做了一期關于Python新手入門時關于賦值語句的內容。
在Python當中,賦值有很多的方式,比如說變量、元組、列表等等的賦值都是不一樣的,所以如果在賦值這一塊模棱兩可,可想而知后面的進階內容,讓你多帶帶寫代碼也是會寸步難行的。
廢話不多說,學而時習之,有則改之無則加勉。
我們來看看Python中常用的賦值語句有哪些:
方法 | 解釋 |
---|---|
a = 10 | 基本形式 |
a,b = 10,20 | 元組賦值 |
[a,b] = [10,20] | 列表賦值 |
a,b = “AB” | 序列賦值 |
a,b = [10,20] | 序列賦值 |
a,*b = “hello” | 擴展的序列解包 |
a = b = c =10 | 多目標賦值 |
a+=1 | 增強賦值 |
序列是有序集的通用術語,在Python中,字符串、列表、元組、字節數組、緩沖區、Xrange對象均是屬于不同的序列類型,也就是說(10,20)既可以說是1個元組,也可以說是1個序列。
舉例1:利用1個元組給另一個元組賦值
a,b = 10,20print(a)print(b)
運行結果:
1020
注意:等號兩邊的元素數量要相當,如果是a,b=10 或者a = 10,20 ,那么就會報錯。
舉例2:利用序列給另一個序列賦值
a,b = [20,30]print(a)print(b)
運行結果:
2030
a,b 默認是一個元組,[20,30]是一個列表,不同的序列類型之間也可以通過這種方式進行賦值。
何為高級賦值語句?就是常規的賦值方法進行操作是會報錯的,得進行一些更高級一點的操作。比如說要把字符"SPAM"賦值給a和b,常規賦值是這樣的:
s = "SPAM"a,b = sprint(a,b )
然后運行之后就會報錯,字符串元素多于元組(a,b)里面的元素,直接復制是會報錯的。
遇到這種情況,我們就需要用到切片的操作進行賦值了:
s = "SPAM"a,b = s[:3],s[2:] print(a,b )
運行結果:
SPA AM
除了用切片的方式,我們還可以用其他的方式給a和b賦值:
s = "SPAM"(a,b),c = s[:2],s[2:]print(a,b,c )
運行結果:
S P AM
這種操作相當于在大元組((a,b),c)里面分了一個小元組(a,b),然后對a,b進行賦值。
舉例:用賦值語句把列表[1,2,3,4,5]進行每次減少1個元素并輸出列表。
l = [1,2,3,4,5]while l : l = l[1:] print(l)
運行結果:
[2, 3, 4, 5][3, 4, 5][4, 5][5][]
現有一個二維列表[[[1,2,3],[4,5,6],[7,8,9]] ,如何用序列賦值的方法進行輸出列表里的每一個元素?方法如下:
s = [[1,2,3],[4,5,6],[7,8,9]]for (a,b,c) in s: print(a,b,c)
運行結果:
1 2 34 5 67 8 9
(a,b,c)和 s 是不同類型的序列類型,通過序列賦值的方法也能夠實現。
前面的常見賦值語句表里面我們講過拓展的序列解包操作:
方式 | 解釋 |
---|---|
a,*b = “hello” | 擴展的序列解包 |
那么它該如何使用?首先我們應該知道 *b 是有何用:
*b:獲取分配完之后所剩的數據,封裝成列表進行輸出
舉例:
a,*b = "abcdefg"print(a)print(b)
運行結果:
a["b", "c", "d", "e", "f", "g"]
通過這個例子可以看出,a被第一個元素賦值,剩下的都給了b,并且剩下的元素都被封裝成了列表。
既然上面我們講了
a,*b = "字符串"
那么如果我們多加一個元素來賦值呢?又會如何?
a,*b,c = "abcdefg"print(a)print(b)print(c)
運行結果:
a["b", "c", "d", "e", "f"]g
可以看出來的是,還真給c留出來了一個對象并賦值,這個方法可以靈活運用。
如果說我們對調一下位置:
*b,a = "abcdefg"print(a,b)
運行結果:
g ["a", "b", "c", "d", "e", "f"]
可以看出,字符串的最后一個元素g還是賦值給了a,所以對調位置也是可以的,此時的a將會從后面取。
如果我們只給3個元素,但有4個元素要賦值,那么 * b 能拿到值嗎?
a,c,*b,d = "abc"print(a,b,c,d)
運行結果:
a [] b c
結果b是1個空列表,因為字符串只有三個字符,不夠給b,同樣的,不管你怎么交換 * b 的位置,結果都一樣,也就是說,會優先給其他元素賦值, b 的優先級最低,有時候會拿不到值*。
有一個點我們需要注意一下,*b 是不能直接賦值的:
前面被賦值的對象只能是列表或者元組的序列類型,而 *b 多帶帶存在時是不屬于這種類型的。
這個時候我們如何改正它?很簡單,把前面變成元組或者列表就可以了:
哪怕是加個逗號,*b都可以變成元組。
那么拓展的序列解包我們也來一個案例,我們還是用上面講過的把列表[1,2,3,4,5]逐次減少1個元素并輸出列表,這次我們用序列解包的方法來做:
l = [1,2,3,4,5]while l: a,*l = l print(l)
運行結果:
[2, 3, 4, 5][3, 4, 5][4, 5][5][]
那么前面高級賦值語句內容我們還講過一個for循環輸出二維列表的例子,那么for循環能不能也用帶 * 的參數來進行賦值呢?答案也是可以的:
多目標賦值的形式:
a = b = c = 10
這也是Python優雅的一個點所在,在底層邏輯是等號右邊先給左邊賦值,依次賦值,共用的是1個首地址,也就是說10先賦值給c,c的值變成了10,c再賦值給b,b再賦值給a,它們的地址都是一樣的:
增強賦值運算不止有 += ,基礎的時候我們還講過:
+= -= *= /= //= %= **=
它們的作用主要是:
1. 執行效率高2. 用于系統優化3. 減少代碼量
這里我就不做舉例了,這個我們經常用到,也很簡單,知道它們有這個效果就可以了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/122003.html
文章目錄 強烈推薦系列教程,建議學起來!! 一.pycharm下載安裝二.python下載安裝三.pycharm上配置python四.配置鏡像源讓你下載嗖嗖的快4.1pycharm內部配置 4.2手動添加鏡像源4.3永久配置鏡像源 五.插件安裝(比如漢化?)5.1自動補碼神器第一款5.2漢化pycharm5.3其它插件 六.美女背景七.自定義腳本開頭八、這個前言一定要看九、pyt...
摘要:例如,整數浮點數字符串等基本類型,就是字面量。所以,取出的字符串內容,并不能直接用作變量名,需要另想辦法。總結抽象一下最初的問題,它實際問的是如何將字符串內容作為其它對象的變量名,更進一步地講是如何將常量轉化為變量。 前幾天,我們Python貓交流學習群 里的 M 同學提了個問題。這個問題挺有意思,經初次討論,我們認為它無解。 然而,我認為它很有價值,應該繼續思考怎么解決,所以就在私密...
摘要:返回值,非必須,返回多個值使用逗號分隔即可。注意第一行末尾的分號無參數無返回值的函數該內容將演示函數的使用便捷性。函數的返回值可以賦值給一個變量,通過打印該變量,即可知道返回的具體內容。先學習一下局部變量與全局變量。 Python 學習的第一個難關 -- 函數,這個地方學會的人覺得沒有啥,沒學過的學的時候迷迷瞪...
閱讀 2533·2021-10-09 09:44
閱讀 639·2019-08-30 15:44
閱讀 2993·2019-08-29 18:46
閱讀 1132·2019-08-29 18:38
閱讀 556·2019-08-26 10:44
閱讀 2431·2019-08-23 16:07
閱讀 1088·2019-08-23 15:38
閱讀 4078·2019-08-23 14:02