在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,這種情況下埠號可以省略。如果使用...