关于python 的函数默认参数与关键字keyword的想法

来源:互联网 发布:ubuntu 突然无法上网 编辑:程序博客网 时间:2024/06/06 09:42

看了官方文档的关键字与默认形参后,发现有几处迷惑之处。为什么默认形参和关键字的定义形式基本没有区别;为什么在keyword中不能参杂着position arguments。个人理解:是因为python的参数列表的随意性决定的。

如:

def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue')
这个函数,我们可以这样初始化:parrot(19),也可以parrot(19,state='',type=''),也可以parrot(19,type='',action='')来初始化一个实例。所以你无法在keyword中参杂一个position argument,因为编译器不知道它assign给哪一个值。比如:parrot(1,atate='','')后面的空串给谁?
在编译器中都是一视同仁的。
还有一个就是python定义函数时,如果默认对象是一个mutable object,那么它的函数运算就会和c系列有差异。python中的默认值只会初始化一次,并会存储起来。测试代码如下:
def f(a, L=[]):    L.append(a)    print(id(L))    return Lprint(f(1))print(f(2))print(f(3))

输出结果:
2347964374792[1]2347964374792[1, 2]2347964374792[1, 2, 3]
这是mutable object那么换一个字面值常量呢?比如string
测试代码:
def f(a, L=""):    print(id(L))    return Lprint(f(1))print(f(2))print(f(3))
输出结果:
221460788702422146078870242214607887024
所以有理由相信编译器处理函数默认值是在堆中划一区域存储的,而不是在栈里。
最后keyword就是处理多个default argument时采用的特别名字。

阅读全文
0 0
原创粉丝点击