關於python的 和

2021-08-19 23:01:20 字數 1747 閱讀 9529

在python中的*和**除了分別表示乘法運算和冪運算外還有其它作用。在python中可能會經常看到類似於def function1(*args, **kwargs)的函式定義形式,或者看到function1(*v1, **v2)的函式呼叫形式,很多沒看到過的人可能會不知所以。下面分別說明:

在函式定義時,*表示可變位置引數,*修飾的引數表示可以傳遞任意個數的引數,傳遞的引數在函式內部表現為乙個元組(tuple)。例如:

>>> 

deftest_args

(*args):

... print(type(args))

... print(args)

...

for arg in args:

... print(arg)

...>>> test_args(1, 2, 'hello')

'tuple'>

(1, 2, 'hello')12

hello

示例中傳遞了三個引數,可以看到args的型別為tuple,可以採取任意的適用與tuple的方法處理args。

在函式呼叫中,*會將使用它修飾傳遞的引數進行迭代展開,例如:

>>> 

deffunc

(a, b, c):

...

return a+b+c

...>>> func(*[1, 2, 3])

6>>> func(*(i*i for i in range(3)))

5>>>

deffunc

(*args):

... print(args)

...>>> func(*range(10))

(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

在函式定義時,**表示可變關鍵字引數,表示可以傳遞任意個數的關鍵字引數(形如a = 1, b = 2),在函式內部表現為乙個字典(dict),例如:

>>> 

deftest_kwargs

(**kwargs):

... print(type(kwargs))

... print(kwargs)

...

for k,v in kwargs.items():

... print('%s:%s'%(k, v))

...>>> test_kwargs(a = 1, b = 2)

'dict'>

a:1b:2

在函式呼叫中,**修飾的傳遞的引數會被當作字典以key=value的形式展開,例如:

>>> 

deffunc

(a, b, c):

... print("a:%s; b:%s; c:%s"%(a, b, c))

>>> func(**)

a:3; b:2; c:1

...>>>

deffunc

(**kwargs):

... print(kwargs)

>>> func(**)

關於python和rabbitmq的那點事兒

rabbitmq是乙個訊息中介軟體,在之前的zmq介紹中有略帶提過。由於zmq的硬傷 無法方便儲存 監控中間過程 故而工作中一直都是使用的 兔子 從1.7.0到現在的2.6.1版本 個人嘗試過的 rabbitmq有著許多令人欣喜 驚嘆的變化 或者說是進步 先來簡單介紹下當前版本 兔子 的閃光點 1....

python關於類和物件

類是python中很重要的資料型別,類的出現可以實現物件的兩量產化。物件等於屬性和方法,比如說人是乙個物件,人的眼睛鼻子等屬於其屬性,而人的運動屬於其方法。簡而言之,就是屬性是靜態的,方法是動態的。python本來就是一種以物件導向解釋性的程式語言。有三個特徵 1 封裝,資訊隱蔽 2 繼承 3 多型...

python 關於post和get的區別

1 url解析 基本格式 schema host port path query string anchor scheme 指定低層使用的協議 例如 http,https,ftp host http伺服器的ip位址或者網域名稱 port http伺服器的預設埠是80,這種情況下埠號可以省略。如果使用...