欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python学习笔记(持续更新)

程序员文章站 2022-04-11 17:49:06
...

一. 定义函数时,默认参数的问题

1. 默认参数值为不可变对象(例如常量)时:

i = 5

def f(arg=i):
    print(arg)

i = 6
f()

得到的结果将会是输出5.

2.默认参数为可变对象(例如列表、字典或类)时:

def f(a, L=[]):
    L.append(a)
return L

print(f(1))
print(f(2))
print(f(3))

这种情况下,输出的结果为:

[1]
[1, 2]
[1, 2, 3]

在python中默认值在函数定义作用域被解析,在代码运行前需要编译,绑定具体的结果,给这个方法静态分配存储空间(参数也要分配存储空间,而且默认参数的存储空间是不变的)。

如果不想让默认值在后续调用中累积,可以采用如下方法定义函数:

def f(a, L=None):
if L is None:
    L = []
L.append(a)
return L