Quantcast
Channel: CodeSection,代码区,Python开发技术文章_教程 - CodeSec
Viewing all articles
Browse latest Browse all 9596

学习日记

$
0
0

python 默认参数工作机制

Default values are computed once, then re-used.

默认参数只会计算一次,不会重复使用


class demo_list:
def __init__(self, l=[]):
self.l = l
def add(self, ele):
self.l.append(ele)
def appender(ele):
obj = demo_list()
obj.add(ele)
print obj.lif
if __name__ == "__main__":
for i in range(5):
appender(i)
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]

函数也是对象,因此定义的时候就被执行,默认参数是函数的属性,它的值可能会随着函数被调用而改变。

Functions in Python are first-class objects, and not only a piece of code.


1 def a():
2 print "a executed"
3 return []
4
5 def b(x=a()):
6 print "id(x): ", id(x)
7 x.append(5)
8 print "x: ", x
9
10 for i in range(2):
11 print "-" * 15, "Call b()", "-" * 15
12 b()
13 print b.__defaults__
14 print "id(b.__defaults__[0]): ", id(b.__defaults__[0])
15
16 for i in range(2):
17 print "-" * 15, "Call b(list())", "-" * 15
18 b(list())
19 print b.__defaults__
20 print "id(b.__defaults__[0]): ", id(b.__defaults__[0])
21
22
23 a executed
24 ――――― Call b() ―――――
25 id(x): 4316528512
26 x: [5]
27 ([5],)
28 id(b.__defaults__[0]): 4316528512
29 ――――― Call b() ―――――
30 id(x): 4316528512
31 x: [5, 5]
32 ([5, 5],)
33 id(b.__defaults__[0]): 4316528512
34 ――――― Call b(list()) ―――――
35 id(x): 4316684872
36 x: [5]
37 ([5, 5],)
38 id(b.__defaults__[0]): 4316528512
39 ――――― Call b(list()) ―――――
40 id(x): 4316684944
41 x: [5]
42 ([5, 5],)
43 id(b.__defaults__[0]): 4316528512

Viewing all articles
Browse latest Browse all 9596

Trending Articles