概述
这个问题很心痛,想了好久了吧!
在做leetcode中的一题时,出现了一个问题。我非常自信的认为,我的算法流程是没有问题的。但是,中间出现的错误却让我不知所措,甚至让我烦心的要死(就是不知道问题出现在哪里)。
久久思寻不得结果,却在上厕所时灵光一现,TMD原来错误出现在这里。
leetcode中的原题是:
给定一组不同的整数 nums,返回所有可能的子集(幂集)。
注意事项:该解决方案集不能包含重复的子集。
例如,如果 nums = [1,2,3]
,结果为以下答案:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
这个问题是被归为回溯算法之中的。
由于之前做了一题回溯算法,题目是:给出 n 代表生成括号的对数,请你写出一个能够生成所有可能括号组合的函数。
我按照这个题目的解法做了这一题,就是按顺序生成所有可能的结果,把正确的结果加入到返回值之中,错误的就进行到下一个判断。
于是,有了下面的过程。
res=[]
nums=[1,2,3,4]
def fun(i,tmp):
if i==len(nums):
print(tmp)
res.append(tmp)
return
fun(i+1,tmp)#当前索引的元素并不加入其中
fun(i+1,tmp.append(nums[i]))#当前索引的元素加入其中
fun(0,[])
print(res)
print(len(res))
这其中有个错误很微妙,是很难看出来,甚至看不出来的。
你看到这,首先应该做的是停止往下看,看看我的代码是不是错误的,有错误的话错误出现在哪里。
。。。。。。。。。。。
自己琢磨了吗?琢磨了再往下看
运行中出现的错误是,
File "E:/Python/subSet.py", line 9, in fun
fun(i+1,tmp.append(nums[i]))
AttributeError: 'NoneType' object has no attribute 'append'
仙人板板的,我在tmp(一个数组)上调用了append方法,结果出现了错误?????
我的tmp什么时候变成了"NoneType",不是List类型的吗?
我用了debug模式调试(之前我都不会调试程序,这一次才正式的学会调试,,,,尴尬),突然就变成了"NoneType",真的是让我毫无防备。F7一进入函数,里面就变成了NoneType。草,为什么?
认识到这个错误是在我上厕所的时候(上厕所虽说是为了排泄,有的时候却有奇效)。TMD,第10行传入的参数不是添加了nums[i]之后的tmp,而是tmp.append(nums[i])的返回值,这个调用结果是None。
我记起了,之前有一次,参数中需要一个有序的数组,我就把nums.sort()传入其中。当时的这个错误也是把我搞了几天,都不知道问题出现在哪里。
没想到这次还是犯了同样的错误,希望以后警醒吧!
最后
以上就是现代皮卡丘为你收集整理的关于函数传入参数的问题的全部内容,希望文章能够帮你解决关于函数传入参数的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复