首页
学习
活动
专区
工具
TVP
发布

函数传入参数的问题

这个问题很心痛,想了好久了吧!

在做leetcode中的一题时,出现了一个问题。我非常自信的认为,我的算法流程是没有问题的。但是,中间出现的错误却让我不知所措,甚至让我烦心的要死(就是不知道问题出现在哪里)。

久久思寻不得结果,却在上厕所时灵光一现,TMD原来错误出现在这里。

leetcode中的原题是:

给定一组不同的整数 nums,返回所有可能的子集(幂集)。

注意事项:该解决方案集不能包含重复的子集。

例如,如果 nums = ,结果为以下答案:

[ [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()传入其中。当时的这个错误也是把我搞了几天,像个傻逼一样傻傻的找错误找了两三天。

没想到这次还是犯了同样的错误,希望以后警醒吧!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180407G0GIRD00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券