1 def f(a, L=[]):2 L.append(a)3 return L4 5 print f(5)6 print f(2)
输出
1 def f(a, L=None):2 if L is None:3 L = []4 L.append(a)5 return L6 7 print f1(5)8 print f1(2)
输出
上面两个函数的区别,f()输出的结果是累加的,f1()输出的结果是独立的
If you don’t want the default to be shared between subsequent calls -> 用f1()
4.7.2. Keyword Arguments
def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'): print("-- This parrot wouldn't", action, end=' ') print("if you put", voltage, "volts through it.") print("-- Lovely plumage, the", type) print("-- It's", state, "!")parrot(1000) # 1 positional argumentparrot(voltage=1000) # 1 keyword argumentparrot(voltage=1000000, action='VOOOOOM') # 2 keyword argumentsparrot(action='VOOOOOM', voltage=1000000) # 2 keyword argumentsparrot('a million', 'bereft of life', 'jump') # 3 positional argumentsparrot('a thousand', state='pushing up the daisies') # 1 positional, 1 keyword # 异常情况,下面几种情况运行都不成功
parrot() # required argument missing ,必须有个必填参数parrot(voltage=5.0, 'dead') # non-keyword argument after a keyword argument ,这个当我把第二个参数换成status='dead'时运行成功。我的理解是前面参数用了参数名,后面就必须得跟,要是前面没跟,那后面跟不跟都可以 parrot(110, voltage=220) # duplicate value for the same argument,重复传参 parrot(actor='John Cleese') # unknown keyword argument #参数typo
输出
解析
传值时,带变量voltage=1000,运行时会自动匹配到对应的位置
不带变量parrot('a million', 'bereft of life', 'jump') ,则按顺序传参
定义函数有 *name和 **name时, *name 必须在 **name之前。
1 def cheeseshop(kind, *arguments, **keywords): 2 print("-- Do you have any", kind, "?") 3 print("-- I'm sorry, we're all out of", kind) 4 for arg in arguments: 5 print(arg) 6 print("-" * 40) 7 for kw in keywords: 8 print(kw, ":", keywords[kw]) 9 10 cheeseshop("Limburger", "It's very runny, sir.",11 "It's really very, VERY runny, sir.",12 shopkeeper="Michael Palin",13 client="John Cleese",14 sketch="Cheese Shop Sketch")15 16 # 输出结果17 -- Do you have any Limburger ?18 -- I'm sorry, we're all out of Limburger19 It's very runny, sir.20 It's really very, VERY runny, sir.21 ----------------------------------------22 shopkeeper : Michael Palin23 client : John Cleese24 sketch : Cheese Shop Sketch