函数的返回建议是 list|[] 还是 list|None 呢

2024-07-26 22:33:37 +08:00
 shinonome

最近开了类型检查,红了一片, 很多都是 None connot be assign

所以请问一下大家遇到返回是空的情况, 是统一的返回 list 还是 list | None 呢

3449 次点击
所在节点    Python
21 条回复
zeyexe
2024-07-26 22:36:05 +08:00
如果返回值的 None 等效空 list ,建议只返回空 list
thinkershare
2024-07-26 23:01:30 +08:00
看情况,因为有时候返回空 list 属于正常状况,返回 None 是异常了,当然更好的方式我还是异常时直接 raise,统一返回 list 消费放好处理一点。
Azure99
2024-07-26 23:51:46 +08:00
你认为字符串""和 None 语义一样么?很显然是不一样的,""是一个空字符串,而 None 不表示任何数据。
所以 2 楼就是优解,如果它是空的,那么返回空 list ,如果有异常,直接抛出异常。不要返回 None 。
Dyon
2024-07-26 23:57:41 +08:00
不考虑上下文一般选择[],保持类型稳定
zictos
2024-07-27 00:00:12 +08:00
1 、看实际情况吧,有时候根据需求可以知道有异常也能返回空 list ,因为事先对于重要性是能有一个初步判断的,所以都返回 list 保持一致性也挺好的。不然有异常时也可以返回 None ,数据为空的时候正常返回空 list 。

3 、还要看实际对于函数的使用,比如你在调用函数后需要将返回值当做 list 进行操作(列表拼接、切片等),那都返回 list 比较好。

3 、如果对于函数的调用仅仅用于判断是否非空,那用 None 就行,实际使用时用类似 if func():这样的方式判断就行。一般函数执行结束后未执行 return 语句或者 return 后面没有任何值,都是默认返回 None 的,所以甚至都不需要专门显式返回 None 。
oyps
2024-07-27 00:23:25 +08:00
我的话,函数返回 None 一般都是异常的结果,直接就 throw 错误,让调用者自己 try catch 去。
lucasj
2024-07-27 00:29:06 +08:00
问一下,怎么开类型检查啊?
oyps
2024-07-27 00:46:15 +08:00
@lucasj 要看具体的编辑器,有些是用某些插件实现的
llsquaer
2024-07-27 00:46:40 +08:00
我觉得函数目的是返回列表就返回列表,虽然 python 中 None 和空列表是同义,但是保不齐你以后还有需要操作列表的情况,比如往里面加数据之类的操作。

当然遇到错误数据该 raise 的还是 raise 。如果忽略错误想继续还是返回列表。
dearmymy
2024-07-27 00:50:18 +08:00
python 思想就是 一路都是执行成功,有问题交给异常 。 再说空 list 跟 string 也可以用 if not 判断
netabare
2024-07-27 02:13:09 +08:00
能不返回 None 就不要返回 None
Zy143L
2024-07-27 04:48:08 +08:00
统一返回 list
调用这个函数返回值判断直接用 if 就行
他空[]就是 false
ho121
2024-07-27 07:00:09 +08:00
提示 None connot be assign 一般是因为没有处理异常,如果返回 None 代表异常的话。
例如元素未找到返回 None:
if xxx is None: print("元素未找到“); return:
这样后面再以引用 xxx 就不会提升 None connot be assign 。
Sawyerhou
2024-07-27 07:11:42 +08:00
可以返回空 list 就返回空 list ,保持返回类型一致。

不能返回空 list 就用 None 。
shinonome
2024-07-27 07:33:06 +08:00
感谢大家, 看来偷懒还是要还帐的
l4ever
2024-07-27 08:58:25 +08:00
@zeyexe 你在说什么?????
None 是没有值, []是空
能一样啊??????
wzdsfl
2024-07-27 16:47:08 +08:00
@l4ever 不懂你在急什么,人家说的是假设条件,看都不看就来急了
HashV2
2024-07-27 21:24:26 +08:00
还是要看 none 和空 list 在实际业务中的所代表的含义有没有差异
julyclyde
2024-07-29 09:43:10 +08:00
cannot be assign 不是左值错误吗??
zsh2517
2024-07-29 13:35:31 +08:00
@zeyexe
@l4ever

#1 的意思,我觉得是在说,如果在业务场景下,需要表示『这里应当是一个数组/列表,且目前数组里面,没有元素』,这个场景下,建议返回 [] 而不是 None 。

如果 None, [] 有不同的语义,那么还是要看实际情况

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1060429

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX