python-函数的缺省参数不能用可变参数如list

2020/8/17更新

事情比我想象的要麻烦。。。还是我大意了。
这次同事是周日下午发来的邮件,表示拼接结果的顺序错了:
在这里插入图片描述
我重新看回代码,发现情况是这样的:

  1. 函数的定义是:
    在这里插入图片描述
  2. 调用情况:
    主函数里要缺省new_path调用,递归里又是要带参数的。那我上次让它每次都清空new_path!当然!不!对!了!

我同事自己十分机智地改成了下面这样,但是他的问题来了:为啥这样能对?
在这里插入图片描述
这个很好理解,带参调用的时候,用的是实际的参数,不带参调用的时候,用的是new_path=[]这个的值,那么就完美实现了清空。new_path接下来变成了局部变量,所以下次再缺省调用时,并不会用到一个所谓的有“案底”的值。

看下面这个例子:

def test_default(str1, li = []):
    print(li)
    li = li or []
    print("li:\n")
    print(li)
    print(str1)
    for i in range(2):
        li.append(5)
    return li
    
str1 = "test default parameter:"
print("\n===============================\n")
print(test_default(str1))

print("\n===============================\n")
print(test_default(str1,[1,2]))

print("\n===============================\n")
print(test_default(str1))

print("\n===============================\n")
print(test_default(str1))

输出结果:
在这里插入图片描述
与预想的一致,多次调用并没有影响。
当然,如果是我,在主函数调用时,直接给一个 [] 就好了,何必绕缺省函数啥的。。。。


原文 2020/8/13

事情的起因是昨晚哦不,今天0:45分,生产的同事发给我一封邮件。

作为一个Python爱好者,我亲爱的同事致力于用python解决生产中遇到的小问题。这次的问题与测序拼接有关。算法我们略去(其实是偏重生物信息学,我懒得写了。。。)。

好了,总之他的问题就是:
在这里插入图片描述
看到list嘛,首先看循环。最后,我发现问题出在:
在这里插入图片描述
红圈的语句是我加的。这样的错误有两处。。。令人窒息有没有,缺省参数怎么能用可变类型呢。。。
看下面这个例子:

def test_default(str, li = []):
    print(str)
    for i in range(5):
        li.append(5)
    return li

def test_normal(str):
    print(str)
    li = []
    for i in range(5):
        li.append(5)
    return li

str1 = "test default parameter:"
str2 = "test local parameter:"

print(test_default(str1))
print(test_normal(str2))

print(test_default(str1))
print(test_normal(str2))

输出结果是:
在这里插入图片描述
为啥第二次执行test_default会保存了上一次的数据呢???
理由:
在这里插入图片描述
希望我同事可以满意。。。希望他不要半夜再发邮件给我了。。。希望他这种问题不要憋一个星期再半夜发邮件问我了。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值