函数
入门。
Python 函数的参数可以设默认值,比如这样一个简单的函数:
>>> def f(x, arr = []):
... arr.append(x)
... return arr
...
如果调用时不给arr
,它将会使用默认的空数组
>>> f(2)
[2]
而如果给了arr
则使用给定的数组:
>>> f(3, [1])
[1, 3]
放弃?
当多次调用函数时,神奇的事情发生了:
>>> def f(x, arr = []):
... arr.append(x)
... return arr
...
>>> f(1)
[1]
>>> f(2)
[1, 2]
比较一下 JavaScript 中的完全一样的函数:
> function f(x, arr=[]) {
... arr.push(x);
... return arr;
... }
undefined
> f(1)
[ 1 ]
> f(2)
[ 2 ]
进阶!
Python 的 default argument 是在函数定义的时候计算的,这不同于其他语言(比如 JavaScript 或 Ruby)在函数调用的时候计算,所以改变了 default argument 之后的调用也都会改变,这就是为什么最后一个调用f(4)
的时候没有给arr
赋值但arr
却保留了之前的值[2,3]
。
为了防止这种情况出现,可以用下面这个方法:
def f(x, arr=None):
arr = arr or []
arr.append(x)
return arr