首頁>Club>
4
回覆列表
  • 1 # 使用者8633641522655

    元組變數前加 * 視為對元組解包。解包後的子內容會依次賦值給對應位置的其他變數

    一個元組解包最經典的用法就是python裡的兩變數值互換但不借用第三中間變數:

    當然這裡沒有 * ,此外還注意到元素數量較少不會引起歧義時,元組兩側的括號可以省略

    回到題圖命令裡,相當於返回一個A,B列表中元素依次互相配對的生成器。假設裡面有 5 個元組,那麼在用 * 解包後就會返回 5 個元素(都是元組)。而命令恰好是一個可以接受無限多引數的函式(作用就是把這些引數內的內容打印出來),於是你就會看到 5 個元組依次出現在螢幕上了。

    擴充套件一下,如其他答主所說,* 也可以用來解包引數以傳遞給函式使用。但這其實也是利用了元組的解包特性。

    例如如下程式碼:

    這是因為這裡的引數分別是 [1,2,3] 和 [4,5,6] 兩個陣列。當然這個函式沒有太大意義。你在很多著名庫裡(比如繪圖的matplotlib)都會看到某些api的語法是 這種形式。這裡是利用了元組解包的另一個性質——元組解包可以包含一個關鍵字,將“多餘”的部分塞給這個可變長的變數中,例如:( 需要注意的是,我這裡是為了方便理解然而這種寫法有時候不被支援,因為python的函式,必須要求所有非關鍵字引數出現在關鍵字引數之前,而這個例子裡有些引數可能是關鍵字形式的)

    一些比較實用的應用,比如遇到 這種,如果我只想獲得第一個和最後一個屬性卻不想理會其他的部分,就可以用上面的 * 賦值法。

    arg 實際上是arguments 的縮寫,即引數的複數形式。所以一般也用 args 作為一種約定俗成的寫法。當然你可以用其他文字代替。

    更進一步,實際上是 key word arguments,即帶關鍵字的引數。這時候傳遞給函式的是一個變長字典。於是你可以猜測 這種寫法實際上是對字典的解包,實際上它就是,例如:

    當然,在函式引數的傳遞過程中,你寫的時候看起來像是 ,實際上的引數是一個字典

  • 中秋節和大豐收的關聯?
  • 南非旅遊要如何著裝呢?