首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
OPPO Watch
Thatscode99
V2EX  ›  Python

小弟刚学 Python 遇到一个知识点来请教,关于{}用法

  •  
  •   Thatscode99 · 59 天前 · 2585 次点击
    这是一个创建于 59 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看到有些人会用这种写法
    else:
    file.close()
    return {}
    或者
    list={}
    这个 return {}是什么意思?似乎{}这个也大有学问。 谢谢
    24 条回复    2020-04-16 08:25:05 +08:00
    1992w
        1
    1992w   59 天前   ❤️ 1
    返回一个没有任何 key 的字典,{}字典的字面量写法
    YUX
        2
    YUX   59 天前
    一般是 list=[] 空 list
    Yourshell
        3
    Yourshell   59 天前 via iPhone
    就返回一个空的字典呗,好久没写了也不知道对不对😄
    gimp
        4
    gimp   59 天前
    一个字典:{ a: 1 }

    一个空字典:{ }
    jeenysem
        5
    jeenysem   59 天前 via Android
    返回一个空字典
    Davic1
        6
    Davic1   59 天前
    return {}
    等价于
    return dict()
    ji39
        7
    ji39   59 天前
    python 的字典和 js 的对象很像啊
    pompeii
        8
    pompeii   59 天前   ❤️ 1
    就是一个空字典,应该是为了保持返回值类型、结构的一直型,即不管是执行了 if 后面的代码,还是执行了 else 里面的代码,这段代码的结果的类型和结构都是一样的,便于处理
    aaa5838769
        9
    aaa5838769   59 天前
    返回字典
    RRRoger
        10
    RRRoger   59 天前   ❤️ 1
    需要注意的是,如果你这里的 list={1},那么 list 就是一个 set,set 是无序集合
    Kilerd
        11
    Kilerd   59 天前
    有一说一,list={} 就很离谱
    arerec
        12
    arerec   59 天前
    u1s1,list={} 代码里下毒
    oahebky
        13
    oahebky   59 天前   ❤️ 1
    一般是一两年新手这么写。
    返回空的东西就直接 return None 。或者 return None 也不写(默认行为)

    调用函数的地方对返回值直接 if ret: ... 判断就可以。
    这样才是灵活使用动态类型。

    如果确定要期望这个函数返回一个字典。那么原代码发生 return {} 的 case 就应该抛出异常。
    xiri
        14
    xiri   59 天前 via Android
    list={}???

    想一下这样会发生什么,hahahahaha
    list={}
    set_test=(1,2,3)
    list_test=list(set_test)
    xiri
        15
    xiri   59 天前 via Android
    @xiri 一时手快打错了,名字改成 tup_test 比较好,这是元组
    ctro15547
        16
    ctro15547   59 天前   ❤️ 1
    这样起名字容易误解。。 {} 是字典<type 'dict'> ,[]是列表<type 'list'>,xxx ={} 可以看成创建了一个 xxx 空的字典对象,然后可以 xxx[‘test’] = ‘test’ 加内容 或者其他字典操作,return {} 然函数返回空字典,伪代码 xxx = 函数的 return {} 跟 xxx = {} 一样,这样可以给你判断一下函数返回了啥
    no1xsyzy
        17
    no1xsyzy   59 天前   ❤️ 1
    @oahebky #13 我觉得如果不把 None 写进函数类型注记里,包括用 Optional 隐含 None,那么不要 return None 而是直接 return ;反之,如果函数类型注记里有 None,就算是 Union[..., None] 这种,也是写 return None 而不是 return 。如果某函数既 Optional 又 Union[..., None],那么我觉得需要明晰此函数的行为并清理注记。

    相对地,如果返回值期望是 None,通常还是采用 if ret is None 来判断,一是 Python 有太多 Falsy 值,二来判断效率高(直接比较对象 id ),三来这样就不可能被 __bool__ (意外)下毒(比如 def __bool__(self): sys.exit() )。

    不过 return {},确实通常比较少见,通常出现空字典也是尝试组装返回值时没有插入任何值导致的结果。不过可能出现在某些算法的短路里面,比如递归的初始条件。

    def comb(keys, values):
    ____if keys and values:
    ________return {key[0]: value[0], **comb(keys[1:], values[1:])}
    ____else:
    ________return {}
    vanityfairn
        18
    vanityfairn   59 天前
    list={},hhhh
    hhhsuan
        19
    hhhsuan   59 天前 via Android
    @oahebky 我就不喜欢返回 None,你讲讲返回 None 有什么好处?
    iuyoy
        20
    iuyoy   59 天前   ❤️ 1
    {} 和 {key:value} 是 dict,而{element}是 set 即 {1,2,3}是 set 。至于 list = {},一般情况下不要改写 python 内置变量。
    loading
        21
    loading   59 天前 via Android
    我看了上面代码下毒的各位大佬深感:
    动态一时爽
    Thatscode99
        22
    Thatscode99   59 天前 via iPhone
    谢谢大佬们的分享
    black11black
        23
    black11black   57 天前
    空{}默认是 dict(),不建议这么使用,如同我建议写 list()一样,这会让你在使用字典和集合的时候产生混淆
    Thatscode99
        24
    Thatscode99   44 天前
    @black11black 谢谢指导
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1804 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 17:23 · PVG 01:23 · LAX 10:23 · JFK 13:23
    ♥ Do have faith in what you're doing.