小弟刚学 Python 遇到一个知识点来请教,关于{}用法 - V2EX
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
Thatscode99
V2EX    Python

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

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

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

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

    如果确定要期望这个函数返回一个字典。那么原代码发生 return {} 的 case 就应该抛出异常。
    xiri
        14
    xiri  
       2020-04-01 09:32:57 +08:00 via Android
    list={}???

    想一下这样会发生什么,hahahahaha
    list={}
    set_test=(1,2,3)
    list_test=list(set_test)
    xiri
        15
    xiri  
       2020-04-01 09:35:58 +08:00 via Android
    @xiri 一时手快打错了,名字改成 tup_test 比较好,这是元组
    ctro15547
        16
    ctro15547  
       2020-04-01 10:25:32 +08:00   1
    这样起名字容易误解。。 {} 是字典<type 'dict'> ,[]是列表<type 'list'>,xxx ={} 可以看成创建了一个 xxx 空的字典对象,然后可以 xxx[‘test’] = ‘test’ 加内容 或者其他字典操作,return {} 然函数返回空字典,伪代码 xxx = 函数的 return {} 跟 xxx = {} 一样,这样可以给你判断一下函数返回了啥
    no1xsyzy
        17
    no1xsyzy  
       2020-04-01 10:30:48 +08:00   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  
       2020-04-01 11:16:30 +08:00
    list={},hhhh
    hhhsuan
        19
    hhhsuan  
       2020-04-01 11:18:59 +08:00 via Android
    @oahebky 我就不喜欢返回 None,你讲讲返回 None 有什么好处?
    iuyoy
        20
    iuyoy  
       2020-04-01 11:43:28 +08:00   1
    {} 和 {key:value} 是 dict,而{element}是 set 即 {1,2,3}是 set 。至于 list = {},一般情况下不要改写 python 内置变量。
    loading
        21
    loading  
       2020-04-01 12:18:52 +08:00 via Android
    我看了上面代码下毒的各位大佬深感:
    动态一时爽
    Thatscode99
        22
    Thatscode99  
    OP
       2020-04-01 17:33:08 +08:00 via iPhone
    谢谢大佬们的分享
    black11black
        23
    black11black  
       2020-04-03 18:09:08 +08:00
    空{}默认是 dict(),不建议这么使用,如同我建议写 list()一样,这会让你在使用字典和集合的时候产生混淆
    Thatscode99
        24
    Thatscode99  
    OP
       2020-04-16 08:25:05 +08:00
    @black11black 谢谢指导
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1400 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 16:43 PVG 00:43 LAX 09:43 JFK 12:43
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86