PEP 802 – Display Syntax for the Empty Set

37 天前
 XIVN1987
>>> type({/})
<class 'set'>
>>> {/} == set()
True

感觉好奇怪的语法,,为啥非要引入一个空 set 语法??有啥特别大的好处吗?? set() 也挺短的啊??

1466 次点击
所在节点    Python
11 条回复
iorilu
37 天前
就是感觉空 set 缺一个字面量写法呗, 别的都有, 唯独这个没

想起来了, 空 tuple, 也没, 要不弄个(/)
XIVN1987
37 天前
@iorilu

In [14]: type(())
Out[14]: tuple

In [15]: () == tuple()
Out[15]: True
XIVN1987
37 天前
这个 {/} 大概是 python 首创语法了吧
Vegetable
37 天前
你是用多了不觉得奇怪吧

pep 开头已经说的很清楚了,我认为理由很充分。

> This complements the existing notation for empty tuples, lists, and dictionaries, which use (), [], and {} respectively.


{ i for i in range(10) }是 set
{ i: i for i in range(10) }是 dict

你习惯了觉得正常,反正我一直认为 set 和 dict 的符号设计缺乏一致性,打个补丁虽然解决不了,但是能好一些。
XIVN1987
37 天前
@Vegetable

空 set 用 {},空 dict 用 {:} 最符合直觉,,但空 dict 已经用了 {},,为了兼容性不可能用这个方案。。

既然符合直觉的方案已经没了,,那就没必要硬凑一个不符合直觉的方案来用,,毕竟 set() 本身也挺短的。。
iorilu
36 天前
@XIVN1987 确实 ,tuple 比较特别, 空 tuple 可以()
但有一个元素又不行了(1)

但 set, 没有空 set, 但 1 个的没问题{1}

唉, 还是不一致
keakon
36 天前
其实这样也行:
>>> {*()}
set()
carlojie
36 天前
这他吗有意义吗? 都 ai 时代了
ershierdu
36 天前
踩过这个坑好多次了,经常以为{}是空集合
iorilu
36 天前
@keakon
>>> {*{}}
set()
fushall
35 天前
@keakon 竟然还能这样啊,学到了哈哈哈

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

https://ex.noerr.eu.org/t/1151185

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

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

© 2021 V2EX