我比較常用到的地方是 class 的 super
class A:
def __init__(self, a, b = "b", c = "c"):
self.a = a
self.b = b
self.c = c
class B(A):
def __init__(self, *args, **kwargs):
super(*args, **kwargs)
print(self.a, self.b, self.c)
B("a", c="更新")
data = ["更新"]
dataDict = {
"b": "更新"
}
B(*data, **dataDict)
不過主要還是看程式中有沒有需要用到這種語法
不用特別注意說在哪要用到
補充: 然後在 javascript 中沒有 ** 這種語法,
只有 類是 python *
的咚咚 -> ...
名字叫展開運算子(Spread syntax
) 中文翻得很怪 ww
[Python] *args 和 **kwargs 是什麼?一次搞懂它們!
python 函數的可變參數 *args 和 **kwargs
當你沒有發現到使用時機的時候,就是用不到的時候
當你需要的時候就是使用的時機
我覺得啦,不用硬要去想使用時機是啥
應該這麼說,*和**代表[解開]
這兩個是在你函式接受的參數數量不固定的時候用,一個是將你的匿名參數依順序組成元組:
def acceptArgs(*args):
# acceptArgs接受[被解開的args(類型tuple)]當作參數
print(args)
# 所以這邊可以用args來取得這個tuple
for i in args:
print(i)
acceptArgs(1, 2, "a")
acceptArgs(1, 2)
一個是將具名參數組成dict
def acceptKargs(**kargs):
# acceptKargs接受[被解開的kargs(類型dict)]當作參數
print(kargs)
for i in kargs.items():
print(i)
acceptKargs(a=1, b=2, c="c")
# kargs = {"a":1, "b":2, "c":"c"}
你可以混用,只是要遵守匿名參數在前,具名在後,固定個數參數在前,不固定在後的原則。
def whatEver(var1, var2, *args, ,var3=None, **kargs):
print(args, kargs)
k(1, 2, "a", "b", k1=1, k2=2, k3="c")
# ('a', 'b') {'k2': 2, 'k3': 'c'}
譬如你要寫一個加總的函示,這樣寫你就可以自動將參數變成一個tuple,然後加起來。
def mySum(*args):
return sum(arg)
也可以用來輸入參數
a = [1, 2, 3]
mySum(*a)
mySum(1, 2, 3)
# 上面兩個函式相同
b = {'a':1, 'b':2, 'c': "c"}
myPrint(**b)
myPrint(a=1, b=2, c="c")
# 上面兩個函式相同