首頁>Club>
12
回覆列表
  • 1 # 使用者7121672268892

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

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

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

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

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

    例如如下程式碼:

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

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

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

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

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

  • 2 # 使用者6064416536743

    變數前加*號,只有在變數為指標情況下才是合法的。

    當*用於定義時,是標明該變數為指標型別。

    除此以外,*的作用是取值。

    C++中的指標可以理解為一個地址的值,*用於取值時就是取出改地址中儲存的值。

    比如下面的程式:

    #include

    using namespace std;

    int main()

    {

    int a = 10;

    int *p;//這裡的*是標識p的型別為整型指標(int*)型別。

    p=&a;//將p指向a的地址。

    cout

    a = 20;//改變a的值,也就是改變*p的值。

    cout

    return 0;

    }

    該程式會輸出:

    *p = 10

    *p = 20

    可以看到*p的值是和a的值同步的,或者更準確的說,*p就是a。

  • 中秋節和大豐收的關聯?
  • 《灌籃高手》日文版中流川楓的配音是誰?