设为首页 加入收藏

TOP

学习日记
2017-09-30 17:12:57 】 浏览:9267
Tags:学习 日记

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.l
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 

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇linux下安装python 下一篇《python源码剖析》笔记一——pyt..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目