python中的 和 的用途

2022-11-24 19:06:40 字數 2508 閱讀 1145

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)

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'

混合引數型別

任意的位置引數和關鍵字引數可以和其他標準的引數宣告一起使用。混合使用時要加些小心,因為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的。

C 中 的3種用途

1.忽略轉義字元 例如string filename d 文字檔案 text.txt 使用 後 string filename d 文字檔案 text.txt 2.讓字串跨行 例如string strsql select from humanresources.employee as e inner...

python檔案的兩種用途

x 1 def f1 print from f1 def f2 print from f2 f1 f2 如果直接執行run.py會直接執行aaa.py中的f1 和f2 但是如果我們在aaa.py中加上if name main 這句話,則可以防止執行run.py時執行f1 和f2 因為當aaa.py被...

Python檔案的兩種用途

一 一個python檔案的兩種用途 1 被當作程式執行 2 被當作模組匯入 這兩種python檔案的區別是啥?如下 建立一個foo.py的檔案 print 模組foo x 1 函式在定義階段已經定義好了x def get print x def change global x x 0 這裡呼叫多為除...