V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
shinonome
V2EX  ›  Python

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

  •  
  •   shinonome · 125 天前 · 2930 次点击
    这是一个创建于 125 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    不能返回空 list 就用 None 。
    shinonome
        15
    shinonome  
    OP
       124 天前
    感谢大家, 看来偷懒还是要还帐的
    l4ever
        16
    l4ever  
       124 天前
    @zeyexe 你在说什么?????
    None 是没有值, []是空
    能一样啊??????
    wzdsfl
        17
    wzdsfl  
       124 天前
    @l4ever 不懂你在急什么,人家说的是假设条件,看都不看就来急了
    HashV2
        18
    HashV2  
       124 天前
    还是要看 none 和空 list 在实际业务中的所代表的含义有没有差异
    julyclyde
        19
    julyclyde  
       122 天前
    cannot be assign 不是左值错误吗??
    zsh2517
        20
    zsh2517  
       122 天前
    @zeyexe
    @l4ever

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

    如果 None, [] 有不同的语义,那么还是要看实际情况
    jack2020
        21
    jack2020  
       88 天前
    返回 list ,return None 的地方一般是边界条件吧,可以使用 raise 异常
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2567 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:54 · PVG 23:54 · LAX 07:54 · JFK 10:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.