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 can't be an expression
16 >>> F('1'=a,'2'=b)
17   File "<stdin>", line 1
18 SyntaxError: keyword can't be an expression
19 >>> F(1='a',2='b')
20   File "<stdin>", line 1
21 SyntaxError: keyword can't be an expression
22 >>> F('a'=1,'b'=2)
23   File "<stdin>", line 1
24 SyntaxError: keyword can't 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必须使用等式赋值的方式

 

 

                                      

posted @ 2016-03-05 21:34  hb91  阅读(845)  评论(0编辑  收藏  举报