关于Python函数的默认参数
演示Python的函数参数默认值让人困惑的地方,如下代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 关于函数的默认参数,Block A 和 Block B 有差别吗?
# 从输出来看,是有,但是为什么呢?
def make_node(color='@', children=list()):
node = {
'color': color,
'children': children
}
return node
if __name__=='__main__':
if True: # Block A
a = make_node(color='#', children=list())
x = a
b = make_node(color='$', children=list())
x['children'].append(b)
x = b
c = make_node(color='%', children=list())
x['children'].append(c)
print a
print '---------------------------------------A END\n\n'
if True: # Block B
a = make_node(color='#')
x = a
b = make_node(color='$')
x['children'].append(b)
x = b
c = make_node(color='%')
x['children'].append(c)
print a
print '---------------------------------------B END'
看看输出:
{'color': '#', 'children': [{'color': '$', 'children': [{'color': '%', 'children': []}]}]}
---------------------------------------A END
{'color': '#', 'children': [{'color': '$', 'children': [...]}, {'color': '%', 'children': [...]}]}
---------------------------------------B END
Block A的输出是我要达到的效果。而在Block B里,节点的list是同一个(也就是对象ID一样),这当然是我不希望看到的结果!
那么是什么原因导致我不能少敲些字符呢?关于Python函数的默认参数有什么介绍文档呢?