Python3.2官方文档教程--方法定义--关键字参数

可以通过形式<kwarg = value>关键字参数调用方法。例如, 接下来方法:

def parrot(voltage, state=a stiff, action=voom, type=Norwegian Blue):

print("-- This parrot wouldnt", action, end=’ ’)

print("if you put", voltage, "volts through it.")

print("-- Lovely plumage, the", type)

print("-- Its", state, "!")

接受1个要求的参数(voltage)和三个可选择参数(state, actiontype)。这个方法用以下任何一种方法调用。

parrot(1000) # 1 positional argument

parrot(voltage=1000) # 1 keyword argument

parrot(voltage=1000000, action=VOOOOOM) # 2 keyword arguments

parrot(action=VOOOOOM, voltage=1000000) # 2 keyword arguments

parrot(a millionbereft of lifejump) # 3 positional arguments

parrot(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 关键参数后无关键参数

parrot(110, voltage=220) # duplicate value for the same argument  同一参数重复赋值

parrot(actor=John Cleese) # unknown keyword argument 无名的关键参数

在方法调用中,关键字参数必须遵循位置参数。 所有的关键参数必须符合方法接受的参数其中之一。(例如, actor不是parrot方法的合法参数),但是它们的次序不重要。这包含非选择的参数(例如parrot(voltage = 1000)是合法的)。没有参数可以多次接受一个值。以下例子由于这种限制而运行有问题。

>>> def function(a):

... pass

...

>>> function(0, a=0)

Traceback (most recent call last):

File "<stdin>", line 1, in ?

TypeError: function() got multiple values for keyword argument a

当最后一个形参是**name时,它可以接受包含除了形式参数之外的所有关键字的字典。这可以和形如“*name”的形式参数结合使用。*name将会在下节讲到,它可以接受包含位置参数的数组。*name必须在**name之前出现。例如,我们可以如下方法:

def cheeseshop(kind,*arguments,**keywords):

print("-- Do you have any", kind, "?")

print("-- Im sorry, were all out of", kind)

for arg in arguments:

print(arg)

print("-"*40)

keys = sorted(keywords.keys())

for kw in keys:

print(kw, ":", keywords[kw])

它可以按照如下方法调用

 

cheeseshop("Limburger", "Its very runny, sir.",

"Its really very, VERY runny, sir.",

shopkeeper="Michael Palin",

client="John Cleese",

sketch="Cheese Shop Sketch")

结果如下:   

-- Do you have any Limburger ?

-- Im sorry, were all out of Limburger

Its very runny, sir.

Its really very, VERY runny, sir.

----------------------------------------client : John Cleese

shopkeeper : Michael Palin

sketch : Cheese Shop Sketch

注意:关键字参数名字的列表通过在打印关键字典内容之前调用keys()方法进行创建。如果没有根据这创建,参数打印的序列将没有定义。

你可能感兴趣的:(python)