找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2490|回复: 1

[讨论] 关于Python默认参数的问题

1

主题

1

帖子

1

积分

贫民

积分
1
erew 发表于 2020-3-19 09:19:35 | 显示全部楼层 |阅读模式
代码一:def f(a, L=[]):  
    L.append(a)
    return L
print(f(1))
print(f(2))
print(f(3))

代码二:
def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L
print(f(1))
print(f(2))
print(f(3))



Python的函数的默认参数只会在定义时计算一次,因此第一段代码三次打印结果为L=[1], L=[1,2], L=[1,2,3]
但是第二段代码输出L=[1], L=[2], L=[3]。这样看来每次调用都执行了L=None这条语句啊。这里有点困惑
回复

使用道具 举报

0

主题

3

帖子

3

积分

贫民

积分
3
wx_ozYA55iW 发表于 2020-3-29 11:08:07 | 显示全部楼层
def f(a, L=None):
    if L is None:
        print('L is None')   # 因为没传 L 所以归零了
        L = []
    L.append(a)
    return L
print(f(1))
print(f(2))
print(f(3))

如果硬要用,可能是这样:

def f(a, L=None):
    if L is None:
        print('L is None')
        L = []
    L.append(a)
    return L
L = f(1)
print(L)
L = f(2, L)
print(L)
L = f(3, L)
print(L)

太不优雅了…
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表