Python 引數知識(變數前加星號的意義)

2021-08-14 06:38:58 字數 2195 閱讀 7937

過量的引數

在執行時知道乙個函式有什麼引數,通常是不可能的。另乙個情況是乙個函式能操作很多物件。更有甚者,呼叫自身的函式變成一種api提供給可用的應用。

對於這些情況,python提供了兩種特別的方法來定義函式的引數,允許函式接受過量的引數,不用顯式宣告引數。這些「額外」的引數下一步再解釋。

注意args和kwargs只是python的約定。任何函式引數,你可以自己喜歡的方式命名,但是最好和python標準的慣用法一致,以便你的**,其他的程式設計師也能輕鬆讀懂。

位置引數

在引數名之前使用乙個星號,就是讓函式接受任意多的位置引數。

>>> def multiply(*args):

...     total = 1

...     for arg in args:

...         total *= arg

...     return total

...>>> multiply(2, 3)

6>>> multiply(2, 3, 4, 5, 6)

720python把引數收集到乙個元組中,作為變數args。顯式宣告的引數之外如果沒有位置引數,這個引數就作為乙個空元組。

關鍵字引數

python在引數名之前使用2個星號來支援任意多的關鍵字引數。

>>> def accept(**kwargs):

...     for keyword, value in kwargs.items():

...         print "%s => %r" % (keyword, value)

...>>> accept(foo='bar', spam='eggs')

foo => 'bar'

spam => 'eggs'

注意:kwargs是乙個正常的python字典型別,包含引數名和值。如果沒有更多的關鍵字引數,kwargs就是乙個空字典。

混合引數型別

任意的位置引數和關鍵字引數可以和其他標準的引數宣告一起使用。混合使用時要加些小心,因為python中他們的次序是重要的。引數歸為4類,不是所有的類別都需要。他們必須按下面的次序定義,不用的可以跳過。

1)必須的引數

2)可選的引數

3)過量的位置引數

4)過量的關鍵字引數

def complex_function(a, b=none, *c, **d):

這個次序是必須的,因為*args和**kwargs只接受那些沒有放進來的其他任何引數。沒有這個次序,當你呼叫乙個帶有位置引數的函式,python就不知道哪個值是已宣告引數想要的,也不知道哪個被作為過量引數對待。

也要注意的是,當函式能接受許多必須的引數和可選的引數,那它只要定義乙個過量的引數型別即可。

傳遞引數集合

除了函式能接受任意引數集合,python**也可以呼叫帶有任意多數量的函式,像前面說過的用星號。這種方式傳遞的引數由python擴充套件成為引數列表。以便被呼叫的函式

不需要為了這樣呼叫而去使用過量引數。python中任何可呼叫的,都能用這種技法來呼叫。並且用相同的次序規則和標準引數一起使用。

>>> def add(a, b, c):

...     return a + b + c

...>>> add(1, 2, 3)

6>>> add(a=4, b=5, c=6)

15>>> args = (2, 3)

>>> add(1, *args)

6>>> kwargs=

>>> add(a=7, **kwargs)

24>>> add(a=7, *args)

traceback (most recent call last):

file "", line 1, in

typeerror: add() got multiple values for keyword argument 'a'

>>> add(1, 2, a=7)

traceback (most recent call last):

file "", line 1, in

typeerror: add() got multiple values for keyword argument 'a'

注意這個例子的最後幾行,特別留意當傳遞乙個元組作為過量的位置引數時,是否要顯式的傳遞關鍵字引數。因為python使用次序規則來擴充套件過量的引數,那位置引數要放在前面。這個例子中,最後兩個呼叫是相同的,python不能決定那個值是給a的。

Python基礎知識 變數和引用

變數和資料都是儲存在記憶體中的 在python中函式的引數傳遞以及返回值都是引用傳遞的 變數和資料是分開儲存的 變數中記錄資料的位址,就叫做引用 使用id 函式可以檢視變數中儲存的資料所在的記憶體位址 注意 如果變數已經被定義,當給乙個變數複製的時候,本質上是修改了資料的引用。變數不再對之前的資料引...

python 函式引數前加 星號的含義

加乙個 星號 表示引數數量不確定,將傳入的引數儲存為元組。加兩個 星號 表示引數數量不確定且引數型別是關鍵字引數,將傳入的引數儲存為字典。加乙個 星號 def main args print args main 1,2 out 1,2 加兩個 星號 def main kwargs print kwa...

Python中引數前加星號的用法

剛開始折騰python,今天發現了乙個很奇怪的錯誤。def accept s print sum s list 0,1,2,3,7.5 print sum list accept list 這段 會報錯 typeerror unsupported operand type s for int and...