def function_with_one_star(*t):
print(t, type(t))
def function_with_two_stars(**d)
print(d, type(d))
上面定義了兩個函式,分別用了帶乙個星號和兩個星號的引數,它們是什麼意思,執行下面的**:
function_with_one_star(1, 2, 3)
function_with_two_stars(a = 1, b = 2, c = 3)
結果如下
(1, 2, 3)
由此可見,帶乙個星號(*)引數的函式傳入的引數儲存為乙個元組(tuple);
而帶兩個星號(*)引數的函式傳入的引數則儲存為乙個字典(dict),並且在
呼叫是採取 a = 1, b = 2, c = 3 的形式。
由於傳入的引數個數不定,所以當與普通引數一同使用時,必須把帶星號的參
數放在最後。
函式在定義中,通過在引數前加星號,將傳遞進來的多個引數轉化為乙個物件,元組或字典,可以說是將這些引數值收集起來。
引數前加乙個星號,表明將所有的值放在同乙個元組中,該引數的返回值是乙個元組。
引數前加兩個星號,表明將所有的值放在同乙個字典中,該引數的返回值是乙個字典。
位置引數
在引數名之前使用乙個星號,就是讓函式接受任意多的位置引數。
>>> def multiply(*args):
... total = 1
... for arg in args:
... total *= arg
... return total
>>> multiply(2, 3)
>>> multiply(2, 3, 4, 5, 6)
python把引數收集到乙個元組中,作為變數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'
混合引數型別
任意的位置引數和關鍵字引數可以和其他標準的引數宣告一起使用。混合使用時要加些小心,因為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)
>>> add(a=4, b=5, c=6)
>>> args = (2, 3)
>>> add(1, *args)
>>> kwargs=
>>> add(a=7, **kwargs)
>>> 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中,會把接收到的引數形成乙個元組,而 則會把接收到的引數存入乙個字典 我們可以看到,foo方法可以接收任意長度的引數,並把它們存入乙個元組中 deffoo args print args foo fruit animal human fruit animal human foo 1,2,...
python中 和 的區別
通常c c 中,算術運算子的計算結果是根據參與運算的兩邊的資料決定的,比如 6 3 2 6,3都是整數,那麼結果也就是整數2 6.0 3.0 2.0 6.0,3.0是浮點數,那麼結果也是浮點數2.0,跟精確的說,只要 兩邊有乙個數是浮點數,那麼結果就是浮點數。在python2.2版本以前也是這麼規定...
python中 和 的用法
1 表示乘號 2 表示倍數,例如 def t msg,time 1 print msg time t hi 3 列印結果 列印3次 hi hi hi 3 單個 1 如 parameter是用來接受任意多個引數並將其放在乙個元組中。def demo p print p demo 1,2,3 1,2,3...