Python精髓之括号家族:方括号、花括号和圆括号,你真的会用吗?

news2025/1/16 20:53:16

Python独一无二的特色除了缩进还有哪些特色呢?大多数的回答一定是 语法简洁、简单易学、代码高效、功能强大四项。那究竟是Python的哪些语言特性使得人们普遍认为Python具有这些特点呢?其实很大程度上,这要归功于列表(list)、字典(dict)、元组(tuple)和集合(set) 这“四大金刚”。尽管整型(int)、浮点型(float)和字符串(str)也很重要,但毫不夸张地说,列表、字典、元组和集合才代表了Python语言的核心和基础,同时也是Python的精髓所在。学会使用列表、字典、元组和集合,就意味着掌握了Python这门编程语言。

那么由列表、字典、元组和集合“四大金刚”,而演变成的由方括号、花括号和圆括号组成的“括号族”,你知道怎么用吗?

01 方括号

方括号几乎是所有编程语言的第一符号。这里的第一,并不是指使用频率,而是指这个符号展现出的编程语言的内涵和创造力。事实上,就符号的使用频率而言,方括号也可能是排在首位的。

1 创建列表

对于初学者来说,创建列表最常用的方法就是用一对方括号。

图片

即便是老鸟,也会大量使用方括号创建列表,尤其是使用推导式创建列表的情况下。

图片

但其实方括号就像口语或俚语,太过随便。大家要习惯使用严谨的list()来创建列表。使用list()创建列表,是list类的实例化的标准方法,可以体会list类的构造函数如何适应不同类型的参数。

在这里插入图片描述

2 列表的索引

方括号可以创建列表,但方括号并不等同于列表,因为方括号还用来索引。

在这里插入图片描述

列表的索引非常灵活,尤其是引入了负数索引,用-1表示最后一个元素或逆序,实属喜大普奔。上面的操作,属于常用索引方式,如果能读懂下面的代码,说明你已经具备了足够深的功力。

图片

3 列表的方法

对于列表对象的方法如果能信手拈来,那就是Python高手了。

图片

02 花括号

花括号代表字典对象,大多数初学者都这样认为。然而,这是错误的,至少是片面的。下面的代码中,a和b都是用花括号创造出来的对象,却一个是字典,一个是集合。

图片

原来,Python用花括号表示字典和集合两种对象:花括号内是空的,或者是键值对的,表示字典;花括号内是无重复元素的,表示集合。为了不引起误会,我习惯用dict()来生成字典,用set()来生成集合。

图片

编码实践中,虽然在某些情况下集合是无可替代的,但集合的使用频率是“四大金刚”中最低的,我们这里不展开讨论,只说说字典的使用技巧。

1 判断一个键是否存在于字典中

Py2时代,dict对象曾经有has_key()的方法,用来判断是否包含某个键。py3舍弃了这个方法,判断一个键是否存在于字典中,只能使用in这样的方法了。

图片

2 向字典中添加一个新键或更新键值

很多人喜欢用对字典的一个键赋值的方法,实现向字典中添加一个新键或更新键值。

在这里插入图片描述

我不推荐这样的方式,使用update()才更有仪式感,还可以一次添加或修改多个键。

图片

3 从字典中获取一个键值

a[‘age’]是最常用的方式,但是也还会遇到键不存在的异常。下面的方法值得推荐。

图片

4 获取字典的全部键、全部值、全部键值对

dict类提供了keys()、values()和items()等三个方法分别返回字典的全部键、全部值和全部键值对。需要注意的是,返回结果并非列表,而是迭代器。如果你需要列表形式的返回结果,请使用list()转换。

图片

5 遍历字典

遍历字典的时候,很多同学或写成遍历字典的keys()。其实,不需要这么麻烦,可以像下面这样直接遍历。

图片

03 圆括号

圆括号代表元组对象,这么说应该没有问题吧?的确,听起来没有问题,但在元组的使用上,我相信每个初学者都会跌进同一个深坑至少一次。

1 必入之浅坑

元组不用于列表的最显著的特点,就是无法更新元素的值。忘记或者忽略这一点,就会入坑。

图片

2 必入之深坑

我们一起来看一下下面这段代码bug在哪里:

图片

分明只提供了1个参数,却提示说给出了6个参数,为什么呢?

原来,元组初始化时,如果只有单个参数,则必须在单个参数之后增加一个逗号(,),否则,初始化结果仅返回原参数。

图片

3 单星号解包元组

格式化输出字符串时,下面也许是很多人的写法。

图片

正确固然正确,但不够精彩。满分写法应该是这样的。

图片

4 为什么要使用元组

既然元组的元素不可改变,那为什么还要使用元组呢?使用列表代替元组不是更方便吗?诚然,在多数情况下,可以使用列表代替元组,但下面的例子却可以证明,列表无法代替元组。

图片

我们可以将元组加到集合中,但列表不行,因为列表是不可哈希(unhashable)的。理解这一点并不困难:列表元素可以被动态改变,所以没有一个固定不变的哈希值——这与集合要求的元素唯一性冲突;而元组的元素被禁止更新,其哈希值在整个生命周期都不会变化,因此可以成为集合的元素。

所以我们可以得到一个结论,元组和列表有着完全不同的存储方式。因为不用考虑更新问题,元组的速度性能要远优于列表。优先使用元组,应该成为Python程序员遵循的一条基本原则。


资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

公众号免费题库使用方法

公众号免费题库使用方法 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 题库:题库后台(点击跳转&#xf…

haoop启动正常,但上不去网页hadoop102:9870

haoop启动正常,但上不去网页hadoop102:9870 症状如下: hadoop启动正常,jps正常 网页上不去 查下cmd,ping不通 解决方法 一、 先查hdfs 命令:vim /opt/module/hadoop-3.1.3/etc/hadoop/hdfs.site.xml 二、查hosts,我就是…

Redis实战篇(五)好友关注

1、点赞 ------------ Set 2、点赞排行 ------SortedSet 3、共同关注 -------set sinter 一、共同关注 Overridepublic Result followCommons(Long id) {// 1.获取当前用户Long userId UserHolder.getUser().getId();String key "follows:" userId;// 2.求交集St…

Gradle (史上最全): 5W字文

Gradle是绕不开的一个构建工具 对于用惯了 maven的人来说, Graddle不好用, 非常不好用, 主要是环境 会遇到各种各样的问题 但是,越来越多的 场景使用到了 Graddle,但是 spring 的源码,使用 Gradle 构建 …

【Fiddler】安卓7.0以上添加Fiddler/Charles证书到系统根证书(模拟器-雷电)

目录 一、安装工具 1、安装open-ssl 2、配置环境变量 3、验证安装 二、Fiddler 1、导出证书 2、转化cer格式变成PEM 3、查看PEM的哈希值 三、Charles 1、导出证书 2、查看PEM的哈希值 四、证书安装到安卓模拟器 (雷电) 1、使用模拟器的adb命令 2、…

【实战案例】——实战渗透某不法网站

作者名:Demo不是emo 主页面链接:主页传送门 创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座…

RPA-机器人流程自动化

RPA-机器人流程自动化RPA-机器人流程自动化简介RPA是什么?RPA历史上的演变RPA原理RPA特点RPA技术框架及功能1.TagUI2.RPA for Python3.Robot Framework4.Automagica5.Taskt6.OpenRPARPA部署模式1 环境配置的参数调整2 将自动化程序整体打包部署3 版本的管理和控制机…

【微服务】SpringCloud的OpenFeign与Ribbon配置

💖 Spring家族及微服务系列文章 ✨【微服务】SpringCloud轮询拉取注册表及服务发现源码解析 ✨ 【微服务】SpringCloud微服务续约源码解析 ✨ ✨【微服务】SpringCloud微服务注册源码解析 ✨【微服务】Nacos2.x服务发现?RPC调用?重试机制&…

token的使用

一:什么是token及token的作用? 1.什么是token? Token是首次登录时,由服务器下发,作为客户端进行请求时的一个令牌。当请求后台方法时,用于身份验证 当第一次登录后,服务器生成一个Token便将此…

1013 Battle Over Cities

目录 Input Specification: Output Specification: Sample Input: Sample Output: 一、题目大意 二、思路 三、代码 It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/to…

138.深度学习分布式计算框架-1

138.1 PaddlePaddle PaddlePaddle是百度开源的一个深度学习平台PaddlePaddle为深度学习研究人员提供了丰富的API,可以轻松地完成神经网络配置,模型训练等任务。官方文档中简易介绍了如何使用框架在 线性回归识别数字图像分类词向量个性化推荐情感分析语…

2.14 分享9个高吸睛小红书首图制作技巧,要认真学哦!【玩赚小红书】

在小红书里,推荐的图片比例是3:4、1:1、4:3。 做图的时候就要提前调整好比例,免得上传被自动裁剪掉重要信息。竖屏最常用,因为比较“霸屏”,展现的信息空间比较大。当然,选哪个比例还是看个人偏好,尽量保持…

2022年C++面试题万余字汇总【面试官常问】

2022年C面试题【常问重点问题】1、请你说说 GET 和 POST 的区别?2、简述一下 C 中的多态?3、说一说进程有多少种状态,如何转换?3、请你说说指针和引用的区别4、简述一下虚函数的实现原理5、说一说 vector 和 list 的区别,分别适用于什么场景…

剪映PC版英文字幕翻译最新方法(中英互译)

原文地址 剪映PC版英文字幕翻译最新方法(中英互译) – 方包博客 – java|python|前端开发|运维|电商|ui设计剪映PC版英文字幕翻译最新方法(中英互译)https://www.fang1688.cn/ziyuan/3431.html 我的是剪映 v3.3.0版本。旧版不支持…

Omorn - NJ301-1100 AND NX102-9000 - CIP - UCMM 通讯

目录 Omorn - NJ301-1100 AND NX102-9000 - CIP - UCMM 通讯 测试案例IP 创建变量类型 指令编写加数据测试 Omorn - NJ301-1100 AND NX102-9000 - CIP - CLASS3 通讯 Omorn - NJ301-1100 AND NX102-9000 - CIP - UCMM 通讯 说明: 1、NJ的网络通讯指令要有CIP…

【C语言入门数据结构】顺序表

🙈个人主页:阿伟t 👉系列专栏:【C语言–大佬之路】 🎈今日心语:你所看到的惊艳,都曾被平庸所历练。 前言:继【时间复杂度和空间复杂】度之后,本章我们来介绍数据结构中…

docker能干什么以及基本名词解释

docker能干什么以及基本名词解释 docker能干什么?比较docker和虚拟机的不同DEVOps (开发,运维)基本名词解释docker能干什么? 比较docker和虚拟机的不同 传统虚拟机,虚拟出一条硬盘,然后再这个系统上安装和运行软件。…

1.3-1.7 测度理论

测度理论 (Durrett) 第五版 个人笔记 答案 Durrett高等概率论教材 (Probability) 攻读概率及统计/机器学习应用方向博士学位. 1. Measure Theory Probability SpacesDistributionsRandom VariablesIntegrationProperties of the IntegralExpected ValueProduct Measures, Fub…

python实现科研通定时自动签到

1 新建虚拟环境 python -m venv venv2 激活环境 3 官网下载edgedriver.exe Edge WebDriver链接在此,下载对应的浏览器的版本,然后改名为msedgedriver.exe放在\venv\Scripts下面。 main.py代码如下: from selenium import webdriver from…

动态规划——完全背包问题(C++实现)

题目描述: 问题分析: 完全背包问题和01背包问题的不同点: 简单01背包中是从N个物品里选,每个物品只能用1次,完全背包则不同,每个物品可以用无限次。 01背包: 如果物品能放入背包&#xff08…