首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

27 个问题,告诉你Python为什么这么设计

为什么有单独元组和列表数据类型? 列表如何在CPython实现字典如何在CPython实现? 为什么字典key必须是不可变? 为什么 list.sort() 没有返回排序列表?...当没有实现映射类有get()或key()方法,或者不是文件类有write()方法,我们偶尔会感到困惑。...列表是可变,这意味着您始终可以更改列表元素。只有不变元素可以用作字典key,因此只能将元组和非列表用作key。 列表如何在CPython实现?...但是,由于无论谁更改键对象都无法判断它是否被用作字典键值,因此无法在字典修改条目。然后,当你尝试在字典查找相同对象无法找到它,因为其哈希值不同。...换句话说,应该使用 == 来比较字典键,而不是使用 is 。 使用列表作为键进行复制。这没有用,因为作为可变对象列表可以包含自身引用,然后复制代码进入无限循环。

6.6K11

27 个问题,告诉你Python为什么这么设计?

当没有实现映射类有get()或key()方法,或者不是文件类有write()方法,我们偶尔会感到困惑。...列表是可变,这意味着您始终可以更改列表元素。只有不变元素可以用作字典key,因此只能将元组和非列表用作key。 列表如何在CPython实现?...但是,由于无论谁更改键对象都无法判断它是否被用作字典键值,因此无法在字典修改条目。然后,当你尝试在字典查找相同对象无法找到它,因为其哈希值不同。...换句话说,应该使用 == 来比较字典键,而不是使用 is 。 使用列表作为键进行复制。这没有用,因为作为可变对象列表可以包含自身引用,然后复制代码进入无限循环。...此函数从提供可迭代列表创建新列表其进行排序并返回。例如,下面是如何迭代遍历字典并按keys排序: for key in sorted(mydict): ...

3.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

Python官方二十七问,你知道个啥?

当没有实现映射类有 get()或 key()方法,或者不是文件类有 write()方法,我们偶尔会感到困惑。...列表是可变,这意味着您始终可以更改列表元素。只有不变元素可以用作字典 key,因此只能将元组和非列表用作 key。 18. 列表如何在 CPython 实现?...但是,由于无论谁更改键对象都无法判断它是否被用作字典键值,因此无法在字典修改条目。然后,当你尝试在字典查找相同对象无法找到它,因为其哈希值不同。...换句话说,应该使用 == 来比较字典键,而不是使用 is 。 使用列表作为键进行复制。这没有用,因为作为可变对象列表可以包含自身引用,然后复制代码进入无限循环。...此函数从提供可迭代列表创建新列表其进行排序并返回。例如,下面是如何迭代遍历字典并按 keys 排序: for key in sorted(mydict): ...

2.5K20

Python 核心设计理念27个问题及解答

当没有实现映射类有 get()或 key()方法,或者不是文件类有 write()方法,我们偶尔会感到困惑。...该实现使用其他对象引用连续数组,并在列表头结构中保留指向该数组和数组长度指针。 这使得索引列表 a[i] 操作成本与列表大小或索引值无关。 当添加或插入项调整引用数组大小。...但是,由于无论谁更改键对象都无法判断它是否被用作字典键值,因此无法在字典修改条目。然后,当你尝试在字典查找相同对象无法找到它,因为其哈希值不同。...换句话说,应该使用 == 来比较字典键,而不是使用 is 。 使用列表作为键进行复制。这没有用,因为作为可变对象列表可以包含自身引用,然后复制代码进入无限循环。...此函数从提供可迭代列表创建新列表其进行排序并返回。例如,下面是如何迭代遍历字典并按 keys 排序: for key in sorted(mydict): ...

3.3K21

干货 | 27 个问题,告诉你 Python 为什么如此设计?

当没有实现映射类有 get()或 key()方法,或者不是文件类有 write()方法,我们偶尔会感到困惑。...列表是可变,这意味着您始终可以更改列表元素。只有不变元素可以用作字典 key,因此只能将元组和非列表用作 key。 18. 列表如何在 CPython 实现?...但是,由于无论谁更改键对象都无法判断它是否被用作字典键值,因此无法在字典修改条目。然后,当你尝试在字典查找相同对象无法找到它,因为其哈希值不同。...换句话说,应该使用 == 来比较字典键,而不是使用is 。 使用列表作为键进行复制。这没有用,因为作为可变对象列表可以包含自身引用,然后复制代码进入无限循环。...此函数从提供可迭代列表创建新列表其进行排序并返回。例如,下面是如何迭代遍历字典并按 keys 排序: for key in sorted(mydict): ...

2.7K10

干货 | 27 个问题,告诉你 Python 为什么如此设计?

当没有实现映射类有 get()或 key()方法,或者不是文件类有 write()方法,我们偶尔会感到困惑。...列表是可变,这意味着您始终可以更改列表元素。只有不变元素可以用作字典 key,因此只能将元组和非列表用作 key。 18. 列表如何在 CPython 实现?...但是,由于无论谁更改键对象都无法判断它是否被用作字典键值,因此无法在字典修改条目。然后,当你尝试在字典查找相同对象无法找到它,因为其哈希值不同。...换句话说,应该使用 == 来比较字典键,而不是使用 is 。 使用列表作为键进行复制。这没有用,因为作为可变对象列表可以包含自身引用,然后复制代码进入无限循环。...此函数从提供可迭代列表创建新列表其进行排序并返回。例如,下面是如何迭代遍历字典并按 keys 排序: for key in sorted(mydict): ...

2.6K20

使用Python绝对不应该做什么?

在本文中,我们学习在使用 Python 不应该做什么。 谨慎使用类变量 在 Python ,类变量用作字典,称为方法解析顺序 (MRO)。此外,如果一个类缺少一个属性,则该类缺少一个属性。...软件工程师经常犯一个常见错误,即在迭代项目列表删除项目。...Python开发人员经常Python如何绑定变量感到困惑。它绑定其变量外壳或周围全局范围,因此在调用内部函数时会查找闭包中使用变量值。...滥用__init__ 构造函数在 Python 由一个名为 __init__ 函数表示。形成对象调用 __init__ 方法,该方法分配内存并初始化类属性。...误用表达式 在 Python ,您可以通过为函数参数分配默认值来使其可选。但是,当您将默认值静音,此行为可能会令人困惑

1.2K40

Python 进阶指南(编程轻松进阶):五、发现代码异味

现在,已经通过删除额外副本该代码进行了重复数据删除,只需要在一个地方进行任何必要更改。 与所有代码异味一样,避免重复代码并不是一个必须始终遵循硬性规则。...一般来说,重复代码段越长,或者程序中出现重复副本越多,就越有必要进行重复数据删除。不介意复制粘贴一次甚至两次代码。但是,当我程序存在三个或四个副本通常会考虑代码进行重复数据删除。...但是你源代码中出现一些数字可能会让其他程序员感到困惑(或者让你在编写它们几周后感到困惑)。...字典产生一个字典值,并使用冒号来分隔列表键和值。 这些推导式是简洁,可以使你代码更具可读性。...列表、集合和字典都是可迭代对象,这意味着您可以列表套在列表,如下例所示: >>> nestedIntList = [[0, 1, 2, 3], [4], [5, 6], [7, 8, 9]] >>

94230

让您应用支持新式 Emoji 符号吧!

例如,如果用户在 TODO 应用任务列表里,向 EditText 添加一个 表情,此时用户看到 "豆腐" 出现在屏幕上而没有显示输入 表情,用户则会认为应用存在 bug。...如果您输入肌肉表情,而应用显示了胳膊和颜色方块,那么就不仅会让用户感到困惑,同时对于不同肤色风格表述也有失准确,从而降低了应用用户体验。 随着语言发展,emoji 也在不断进化。...EmojiCompat 会遍历字符串,针对字典树检查每个码点。一旦它在字典树中找到完整 emoji,它会检查是否平台不清楚如何显示 emoji 并且添加 EmojiSpan。...您可以理解为 EmojiCompat 就是使用字典字符串寻找 emoji,而对应字典内容定义就是如何使用 EmojiSpan 来显示所需 emoji。...最后,draw 函数会被调用,然后字体文件 emoji 直接画出来,并且包含您想要效果——您字符串! 最后 Emoji 不仅仅只是有趣,它已经成为我们语言中不可或缺一部分。

39620

Python 3.9 beta2 版本发布了,看看这 7 个新 PEP 都是什么?

是否可以将那些词缀(前缀和后缀统称)指定为序列,以便在一次调用处理多个词缀,这一点尚不明确,最后它被从提案删除了,等待着其他人再次推动更改。...在 3 月底,Dennis Sweeney 在 python-dev 邮件列表上请求核心开发者支持 PEP 616(“字符串删除前缀和后缀方法”)。...2、新解析器 并不令人感到惊讶是,指导委员会已经接受了我们在 4 月中旬介绍过 CPython 新解析器。...这一更改不会太快,因为计划是在 Python 3.9 命令行中提供开关,保持现有解析器可用。 但是 Python 3.10 删除现有的解析器,这可能会导致语言变更。...例如,type.List 类型将不再需要支持诸如“dict[str,list[int]]”之类注解(例如,一个带有字符串键和整数列表字典)。

48320

const关键字秘密:为什么它不总是像你想象那样

(hi); // -> 5 有趣是,当我使用const创建一个对象可以自由地更改它: const person = { name: 'Hassan', }; person.name = 'Sujata...']; // ⚠️⚠️⚠️⚠️ // 从上面的列表中选择其他选项 //查看它如何在代码翻译!...当我们使用 const ,我们创建了一个不可摧毁链接,变量名和一段数据联系在一起。 然而,问题在于:我们仍然可以修改数据本身!只要标签保持完好无损。...我们已经 age 变量分配给数字36,但我们可以将它指向列表任何其他数字: 要明确是,浏览器并没有所有可能数字大索引。希望在这里阐述重点是数字本身无法更改。...这显然会让人感到困惑和无助,这就是为什么在JavaScript基本类是不可变

35220

Python 进阶指南(编程轻松进阶):七、编程术语

虽然计算机术语可能会让新程序员感到困惑和恐惧,但它是基本功。Python 和软件开发几个术语在含义上有细微差别,即使是有经验开发人员有时也会不小心混淆概念。...当我们说“Python 运行一个程序”或“Python 引发一个异常”,我们指的是 Python 解释器——读取.py 脚本并执行其指令。...字符串 r'Green\Blue' 字符串 [] 列表 {'name': 'Zophie'} 字典 b'\x41' 字节 True 布尔值 None 空类型 吹毛求疵的人会说一些说法不是基于官方...值是对象表示数据,比如整数42或者字符串hello。尽管有些令人困惑,但一些程序员术语值用作对象同义词,尤其是对于像整数或字符串这样简单数据类型。...表 7-2:Python 一些可变和不可变数据类型 可变数据类型 不可变数据类型 列表 整数 字典 浮点数 集合 布尔值 字节数组 字符串 数组 固定集合 字节 元组 当您修改一个变量,可能看起来像是在更改对象

1.6K20

Python | 正确使用 Python f-string 格式化字符串 7 个层级

3.1 打印引号 正如我们所知,反斜线\是常用转义字符,用于调用其以下字符替代解释。对于 f 字符串,我们需要注意一条规则:\在 f 字符串表达式括号{}不起作用。...小心打印字典字典值应用到 f 字符串也容易出现错误。我们必须使用不同引号来描述字典键和 f 字符串,如下所示。如果f字符串用双引号表示,那么变量里字典键必须用单引号。...f 字符串都使用相同单引号或双引号, Python 会对我们代码感到困惑, 从而报错。...评估 F 字符串表达式 当我第一次知道 f 字符串简直不敢相信:我们可以在 f 字符串内运行 Python 表达式。如果是真的,还算是字符串吗?...仔细阅读了 PEP 498,终于明白了: F 字符串提供了一种表达式嵌入字符串字面的方法。需要注意是,f 字符串实际上是在运行时间评估表达方式,而不是恒定值。

2K30

使用Codable归档Swift对象

这些值数组和字典也很容易想到:一个字符串,然后是另一个,然后是第三个,依此类推。...我们将在未来项目中更多地研究Codable,但是目前我们需求很简单:我们想要归档一个自定义类型,以便可以将其放入UserDefaults,然后在从UserDefaults返回将其取消存档。...当使用仅具有简单属性类型(字符串,整数,布尔值,字符串数组等),支持归档和取消归档唯一需要做就是向Codable添加一致性,如下所示: struct User: Codable { var...,可能会让人感到困惑。...当我们返回另一种方式当我们拥有JSON数据并且想要将其转换为Swift Codable类型),我们应该使用JSONDecoder而不是JSONEncoder,但是过程大致相同。

2K30

使用 Codable 归档 Swift 对象

这些值数组和字典也很容易想到:一个字符串,然后是另一个,然后是第三个,依此类推。...我们将在未来项目中更多地研究Codable,但是目前我们需求很简单:我们想要归档一个自定义类型,以便可以将其放入UserDefaults,然后在从UserDefaults返回将其取消存档。...当使用仅具有简单属性类型(字符串,整数,布尔值,字符串数组等),支持归档和取消归档唯一需要做就是向Codable添加一致性,如下所示: struct User: Codable { var...,可能会让人感到困惑。...当我们返回另一种方式当我们拥有JSON数据并且想要将其转换为Swift Codable类型),我们应该使用JSONDecoder而不是JSONEncoder,但是过程大致相同。

1.2K20

嘀~正则表达式快速上手指南(上篇)

这样当我们遍历每一行代码就不会茫然,此外基础pandas库也是必要。...当我们寻找重复模式,称为贪婪搜索。否则,我们称之为非贪婪搜索或懒惰搜索。 让我们用* 构建一个 . 贪婪搜索。 ? 因为 * 匹配其左侧 0 个或多个模式类实例,而 ....这是相当多工作。熟练使用正则表达式需要一段时间,但是一旦您掌握它模式,您就能够更快地为字符串分析编写代码。接下来,我们运行一些re 模块常见函数,当我们开始重新整理语料库它们非常有用。...我们会通过代码一步一步进行,这样你就不会感到困惑。...然后我们创建一个空列表emails 用来存放包含每个电子邮件详细信息字典。 我们经常将代码结果打印到屏幕上来判断代码是还是错。

1.6K20

精品|系统入门Python,大佬这篇笔记不容错过

使用负数索引,会从最后一个元素开始计数。最后一个元素位置编号是 -1。 这些特点引起读者切片得到什么样元素感到困惑。有个小窍门可以帮助大家快速锁定切片元素,如下图。 ?...后面那些安全性东西也不大懂,性能优化这个可以来测试一下列表和元组。列表虽然没介绍,但是非常简单,把元组「小括号 ()」该成「括号 []」就是列表了。我们从创建、遍历和占空间三方面比较。...2.3 列表 创建列表列表」定义语法为 [元素1, 元素2, ..., 元素n] 关键点是「括号 []」和「逗号 ,」 括号把所有元素绑在一起 逗号每个元素一一分开 创建列表例子如下:...:」 大括号把所有元素绑在一起 逗号每个键值一一分开 分号键和值分开 创建字典例子如下: d = { 'Name' : 'Tencent', 'Country' : 'China', 'Industry...字典键是不可更改,因此只有那些不可更改数据类型才能当键,比如整数 (虽然怪怪)、浮点数 (虽然怪怪)、布尔 (虽然怪怪)、字符、元组 (虽然怪怪),而列表却不行,因为它可更改

2.2K40

技术 | Python从零开始系列连载(二十六)

一般拿到日期型数据基本都是字符串表示,如 '2017-04-24' 和 '2017/04/24 22:09:48' 。该如何将其转换为日期型和日期时间型呢?...,也可以指定删除某个位置元素; remove方法删除指定元素值; clear方法清空列表元素; del函数删除列表对象; 改 改,说白了就是通过索引方式旧值换成新值 其他列表方法 copy方法复制一个物理对象...字典 字典创建就不是通过上面的括号[]和圆括号()方法构建了,而是通过花括号{}或dict函数来构造键-值。...如果该字典键在dict3存在,则操作改动作,否则完成增加键值使命。...其他字典方法 这里需要注意是,必须使用list函数套在items、keys、values等方法外面,否则不会产生列表结果,而是一个迭代器。

1.5K50

颠覆你认知Python3.9

字典更新/合并到添加新字符串方法,再到引入zoneinfo库,都添加了许多新功能。 此外,已经引入了新稳定且高性能解析器。...这个版本进一步稳定了Python标准库 字典更新和合并运算符 两个新运算符,|并且|=已添加到内置dict 类。 该|运算符用于合并字典,而|=运营商可用于更新词典。...两个新运算符|和|=已被添加到内置dict 类 删除前后缀新字符串 str对象已添加了两个新功能。...内置通用类型类型提示 此版本已启用了键入模块当前可用所有标准集合泛型语法支持。 泛型类型通常是一个容器,例如列表。这是可以参数化类型。...字符串替换功能修复 在Python 3.9之前版本,“”.replace(“”,s,n)对于所有非零n ,返回字符串而不是s。 此错误使用户感到困惑,并导致应用程序中行为不一致。

42320
领券