Skip to content

Instantly share code, notes, and snippets.

@chzyer
Last active February 14, 2017 07:47
Show Gist options
  • Save chzyer/4508440 to your computer and use it in GitHub Desktop.
Save chzyer/4508440 to your computer and use it in GitHub Desktop.
关于Python的参数默认值

最近相继遇到几个python的坑...贴一段有意思的代码

def a(b=[]):
	b.append(1)
	return b
print a()
print a()

输出是什么?

>> [1]
>> [1, 1]

我对python没系统的了解过, 大概只能猜到函数在调用前应该已经生成了这个对象, 而且直接返回指针, 如果不知道的话很容易撞坑上

def a(b=None):
	if not b:
		b = []
	b.append(1)
	return b

a正常应该这样写, 不过这个特性或许可以利用.. 比如, 好吧没想到. 不过传入一个初始化的对象的话不会有这个问题。。

@chickensoup
Copy link

Python的默认参数最好是一个不可变对象。用可变对象做默认参数就容易出问题。
Python的循环内局部变量在循环外也可以访问,也有点类似。
这个特性让python看起来不是很严禁。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment