Python 列表也能拆包?

2021-09-24 07:43:39 字數 1630 閱讀 2207

這是常用的 matplotlib 庫,只是一般我們呼叫plot方法繪圖時,不會去關心它的返回值。然而plt1, = plt.plot(...)這種寫法是什麼意思?被賦值的變數和賦值符號之間多了個逗號。

我的確從來沒關心過plot函式的返回值是什麼,所以當我看到這個截圖的時候,第一反應是以為返回值有多個,**只取了第乙個,剩餘的被忽略了。這種情況一般都是用_做佔位符,來忽略不關心的值。

佔位符_也可以省略嗎?我迅速開啟 pycharm 驗證了一把,事實證明,_不可以省略,我的想法是錯了。

為了查明原因,我去查了 matplotlib 的原始碼,發現plot函式返回的是乙個列表,原始碼如下:

def

plot

(self, *args, **kwargs):

scalex = kwargs.pop('scalex', true)

scaley = kwargs.pop('scaley', true)

ifnot self._hold:

self.cla()

lines =

kwargs = cbook.normalize_kwargs(kwargs, _alias_map)

for line in self._get_lines(*args, **kwargs):

self.add_line(line)

self.autoscale_view(scalex=scalex, scaley=scaley)

return lines

複製**

我這才反應過來,這是列表拆包啊。變數後面的逗號,是因為返回的列表中只有乙個元素,所以拆包的時候變數後面要加個逗號,標明這是拆包,不是賦值。

**中,我們用的比較多的是元組拆包,各種書裡也多是講元組拆包,所以忽略了列表也是可以拆包的。看下面的例子:

x, y = [1, 2]

print(x, y)

複製**

輸出:

1 2

複製**

不僅是元組和列表,所有可迭代物件都可以拆包。我們可以自定義乙個可迭代物件(只需要實現其協議即__iter__方法即可),來驗證一下,**如下:

class

testclass:

def__init__

(self):

self._list = range(3)

def__iter__

(self):

for i in self._list:

yield i

x, y, z = testclass()

print(x, y, z)

複製**

輸出:

0 1 2

複製**

大齡碼農的python之路

Python 列表也能拆包?

前幾天,看書時遇到了這樣乙個問題,看下圖 這是常用的 matplotlib 庫,只是一般我們呼叫 plot 方法繪圖時,不會去關心它的返回值。然而 plt1,plt.plot 這種寫法是什麼意思?被賦值的變數和賦值符號之間多了個逗號。我的確從來沒關心過 plot 函式的返回值是什麼,所以當我看到這個...

Python 列表拆包

我的確從來沒關心過plot函式的返回值是什麼,所以當我看到這個截圖的時候,第一反應是以為返回值有多個,只取了第乙個,剩餘的被忽略了。這種情況一般都是用 做佔位符,來忽略不關心的值。佔位符 也可以省略嗎?我迅速開啟 pycharm 驗證了一把,事實證明,不可以省略,我的想法是錯了。為了查明原因,我去查...

玩著也能學python 玩著也能學Python

內容推薦 縱觀科技領域裡為世界作出偉大貢獻的人,從夢想改變世界到真正改變世界,啟蒙的種子往往來自他們童年時 貪玩 且好奇的心,繼而用 程式設計 澆灌它茁壯成長。玩著學程式設計 系列叢書就是這樣一本站在未來看現在的啟蒙讀本,以精美可愛的插畫 完整的世界觀構建了一座腦洞大開的 未來城市 在那裡,你既是遊...