python函数的参数匹配

Posted hb91

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python函数的参数匹配相关的知识,希望对你有一定的参考价值。

版本:一般用python2.7.6

python3.4.3会标注

 

1、不可变对象(整数、字符串)通过对象引用进行传递,在函数内部不可改变。

1 >>> def f(a):
2 ...     a=100
3 ... 
4 >>> b=88
5 >>> f(b)
6 >>> b
7 88

2、可变对象(列表、字典)也是通过对象引用进行传递,在函数内部可以改变。(原对象本地改变,但是重新赋值不会改变)

1 >>> def F(a):
2 ...     a=[1,2,3]
3 ... 
4 >>> b=[]
5 >>> F(b)
6 >>> b
7 []
1 >>> def F(a):
2 ...     a.append(3)
3 ... 
4 >>> F(b)
5 >>> b
6 [3]

 

 

3、参数匹配

默认参数和关键字参数

 1 >>> def F(a):
 2 ...     a.append(3)
 3 ... 
 4 >>> F(b)
 5 >>> b
 6 [3]
 7 >>> 
 8 KeyboardInterrupt
 9 >>> def F(a,b,c):
10 ...     print(a,b,c)
11 ... 
12 >>> F(1,2,3)
13 (1, 2, 3)
14 >>> F(c=3,a=1,b=2)
15 (1, 2, 3)
16 >>> def F(a,b=2,c=3):
17 ...     print(a,b,c)
18 ... 
19 >>> F(1,4)
20 (1, 4, 3)

 

4、任意参数匹配

 *和**支持任意数目的参数

 *把参数收集到一个元组。

1 >>> def F(*arges):
2 ...     print (arges)
3 ...
4 >>> F(1,a,[2,3],{a:1,b:2})
5 (1, a, [2, 3], {a: 1, b: 2})

**只对关键字参数有效,将关键字参数传递给一个字典,之后可以用字典进行处理。

 1 >>> def F(**arges):
 2 ...     print(arges)
 3 ... 
 4 >>> F()
 5 {}
 6 >>> F(a:1)
 7   File "<stdin>", line 1
 8     F(a:1)
 9        ^
10 SyntaxError: invalid syntax
11 >>> F(a=1,b=2)
12 {a: 1, b: 2}
13 >>> F(1=a,2=b)
14   File "<stdin>", line 1
15 SyntaxError: keyword cant be an expression
16 >>> F(1=a,2=b)
17   File "<stdin>", line 1
18 SyntaxError: keyword cant be an expression
19 >>> F(1=a,2=b)
20   File "<stdin>", line 1
21 SyntaxError: keyword cant be an expression
22 >>> F(a=1,b=2)
23   File "<stdin>", line 1
24 SyntaxError: keyword cant be an expression
25 >>> F(a=1,b=2)
26 {a: 1, b: 2}
27 >>> F(a=[1],b=2)
28 {a: [1], b: 2}
29 >>> 

 

可以传递多个参数的形式

1 >>> def F(*a,**b):
2 ...     print (a,b)
3 ...
4 >>> F(1,a,[3,3],x=1,y=e)
5 ((1, a, [3, 3]), {y: e, x: 1})
1 >>> def F(a,*b,**c):
2 ...     print(a,b,c)
3 ... 
4 >>> F(s,s,s,s=s)
5 (s, (s, s), {s: s})
6 >>> 

上面第二个和第三个‘s‘被收集到一个元组

 

只能用关键字的参数(python3以上)

1 >>> def F(a,*b,c):
2 ...     print (a,b,c)
3 ... 
4 >>> F(1,2,a,c=3)
5 1 (2, a) 3
1 >>> def F(a,*,b,c):
2 ...     print (a,b,c)
3 ... 
4 >>> F(1,b=a,c=3)
5 1 a 3

第一个例子*b后的关键字c必须使用c=3等式方式赋值

第二个例子*后的b和c必须使用等式赋值的方式

 

 

                                      

以上是关于python函数的参数匹配的主要内容,如果未能解决你的问题,请参考以下文章

Python 默认参数混淆

Python 函数声明和调用

python函数

Python学习 :函数

[Python] 函数参数小记

python函数的参数匹配