首页 > 代码库 > Python函数中的参数(二)

Python函数中的参数(二)

当使用混合特定的参数匹配模型时,Python将会遵循以下有关顺序的法则:

1、在函数调用中,参数必须以这样的顺序出现:任何位置参数(Value)、任何关键字参数(name = Value)和*sequence形式的组合,最后是**dict形式

2、在函数头部,参数必须以如下的顺序出现:任何一般参数、任何默认参数、如果有的话,是*name(在Python3.0中是*)的形式,然后是任何name或name=value keyword-only参数,最后是**name形式

 

Python内部是使用以下的步骤来在赋值前进行参数匹配的:

1、通过位置分配非关键字参数

2、通过匹配变量名分配关键字参数

3、其他额外的非关键字参数分配到*name元组中

4、其他额外的关键字参数分配到**name字典中

5、用默认值分配给在头部未得到分配的参数

例子:

1、不含有特殊匹配法的函数,会按照位置从左至右的匹配变量名

1 def f(a, b, c):
2     print(a, b, c)
3 f(1,2,3)
4 
5 #输出结果
6 1 2 3

2、关键字参数的匹配

1 def f(a, b, c):
2     print(a, b, c)
3 
4 f(c = 3, b = 2, a = 1)
5 
6 #输出结果
7 1 2 3

3、默认参数

1 def f(a, b = 2, c = 3):
2     print(a, b, c)
3 
4 f(1)
5 
6 #输出结果
7 1 2 3
 1 def f(a, b = 2, c = 3):
 2     print(a, b, c)
 3 
 4 f(1,4)
 5 输出结果:
 6 1 4 3
 7 
 8 f(1,c = 6)
 9 
10 输出结果:
11 1 2 6

4、关键字参数和默认参数的混合

 1 def func(spam, eggs, toast = 0, ham = 0):
 2     print((spam,eggs,toast,ham))
 3 
 4 func(1,2)
 5 #输出结果
 6 (1, 2, 0, 0)
 7 
 8 func(1, ham = 1, eggs = 0)
 9 #输出结果
10 (1, 0, 0, 1)
11 
12 func(spam = 1, eggs = 0)
13 #输出结果
14 (1, 0, 0, 0)
15 
16 func(1,2,3,4)
17 #输出结果
18 (1, 2, 3, 4)

5、任意参数的实例

def func(*args):
    print("#输出结果")
    print(args)

func()
#输出结果
()

func(1)
#输出结果
(1,)

func(1,2,3,4)
#输出结果
(1, 2, 3, 4)
 1 def f(**args):
 2     print("#输出结果")
 3     print(args)
 4 
 5 f()
 6 #输出结果
 7 {}
 8 
 9 f(a = 1, b = 2)
10 #输出结果
11 {a: 1, b: 2}

6、混合参数实例

1 def f(a, *pargs, **kargs):
2     print("#输出结果:")
3     print(a, pargs, kargs)
4 
5 f(1, 2, 3, x = 1, y = 2)
6 #输出结果:
7 1 (2, 3) {y: 2, x: 1}

 

Python函数中的参数(二)