Python学习中的六个技巧小结

news2024/11/16 12:57:53

1. 引言

“Beautiful is better than ugly.”

上述为著名的The Zen of Python的第一句话,也是有追求的python开发人员的信条之一。
所以我们的问题来了: 如何编写漂亮的Python代码?
本文重点通过九个示例向大家展示Python中的六个小技巧,以帮助大家在日常工作中编写更加优雅的Python程序。

2. 使用product函数代替嵌套循环

当我们的程序变得复杂时,不可避免地需要编写嵌套循环。然而,嵌套循环将使程序更难阅读和维护。
幸运的是,我们可以通过内置的product()函数来避免Python中的嵌套循环。
例如,我们有这样一个程序,它包含3级嵌套For循环:

list_a = [1, 2020, 70]
list_b = [2, 4, 7, 2000]
list_c = [3, 70, 7]

for a in list_a:
    for b in list_b:
        for c in list_c:
            if a + b + c == 2077:
                print(a, b, c)
# 70 2000 7

为了使代码更整洁,我们可以使用来自itertools模块的product()函数来优化代码:

from itertools import product

list_a = [1, 2020, 70]
list_b = [2, 4, 7, 2000]
list_c = [3, 70, 7]

for a, b, c in product(list_a, list_b, list_c):
    if a + b + c == 2077:
        print(a, b, c)
# 70 2000 7

3. 海象运算符:赋值表达式中的可爱技巧

自Python3.8以来,出现了一种名为walrus operator的新语法,可以使值的赋值传递到表达式里。
海象运算符:=,其可爱的名字来自于海象的眼睛和象牙。
在这里插入图片描述

该特性的语法非常简单,比如我们希望将上述两行代码用一行代码来实现,该如何操作呢?

author = "Zhao"
print(author)
# Zhao

不幸的是,我们不能直接将赋值表达式放入print()函数中。如果我们尝试它,将会有一个TypeError:

print(author="Zhao")
# TypeError: 'author' is an invalid keyword argument for print()

多亏了海象操作符,我们真的可以在一行中完成:

print(author:="Zhao")
# Zhao

4. 三目运算符:在一行中编写简单的If-Else结构

if-else条件语句在编程世界中随处可见。为了使简单的逻辑易于表达,Python为我们提供了三目运算符。简单地说,它只允许在一行中放入if-else条件:

min = a if a < b else b

显然,上面的代码比以下的代码整洁得多:

if a<b:
  min = a
else:
  min = b

5. 使用Lambda表达式定义简单函数

如果我们只想定义一个简单的函数,可能不需要使用传统的语法。lambda表达式往往是一个更优雅的选项。
例如,下面的函数主要用于实现求解斐波那契数的功能:

def fib(x):
    if x<=1:
        return x
    else:
        return fib(x-1) + fib(x-2)

它工作得很完美,但代码本身有点丑陋。让我们写一行代码来实现相同的函数:

fib = lambda x: x if x <= 1 else fib(x - 1) + fib(x - 2)

6. 使用列表生成式

使用列表生成式可以使我们的代码更加优雅,这仍然是一种保守的说法。因为它可以节省大量的输入时间,同时保持代码的可读性。很少有编程语言能做到这一点。

Genius = ["Jerry", "Jack", "tom", "yang"]
L1 = ['Genius' if name.startswith('y') else 'Not Genius' for name in Genius]
print(L1)
# ['Not Genius', 'Not Genius', 'Not Genius', 'Genius']

请随意享受一下上面的优雅程序,并考虑一下如果没有列表生成式相关技巧,我们需要编写多少行代码。

7. 使用星号来解包可迭代对象

如何将一个列表,一个元组和一个集合合并成一个列表?
最优雅的方式是使用星号* :

A = [1, 2, 3]
B = (4, 5, 6)
C = {7, 8, 9}
L = [*A, *B, *C]
print(L)
# [1, 2, 3, 4, 5, 6, 8, 9, 7]

如上所述,星号可以用作可迭代对象的前缀来解包相应的元素。
除了解包可迭代对象外,星号还可以用于Python中解构赋值:

a, *mid, b = [1, 2, 3, 4, 5, 6]
print(a, mid, b)
# 1 [2, 3, 4, 5] 6

如上所示,在星号*的帮助下,mid变量将中间的项作为列表接收。

8. 总结

本文重点介绍了Python中常用的六个小技巧,并给出了相应的代码示例,使用它们可以提升大家的编码效率。

您学废了嘛?

9. 参考

链接戳我

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

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

相关文章

java后端-servlet超详细入门

java后端介绍今天我正式开始了一个新话题&#xff0c;那就是 Web。目前我主要会介绍后端。作为后端的老大哥 java&#xff0c;也有很多后端框架&#xff0c;比如大家耳熟能详的 spring 等。今天来带大家入门 servlet&#xff0c;不管是学生&#xff0c;刚毕业或是已经工作自学编…

【倍增】魔力小球

今天最后一篇&#xff0c;该睡了&#xff0c;怕猝死QwQ学校OJ上的一道模板题&#xff0c;去年不会做&#xff0c;今年还是不会做嘻嘻&#xff0c;还好最后调出来了&#xff0c;错的原因竟然是题目有歧义这个小球i的i是他喵的小球编号&#xff0c;不是id&#xff01;出题人是懂出…

Win11的两个实用技巧系列之电脑system占用高的解决办法

Win11 system占用cpu过高是什么原因? Win11电脑system占用高的解决办法Win11 system占用cpu过高是什么原因&#xff1f;Win11系统遇到system占用cpu很高&#xff0c;该怎么解决呢&#xff1f;下面我们就来看看Win11电脑system占用高的解决办法System占用cpu过高导致电脑卡顿&a…

2023年中职网络安全技能竞赛网页渗透(注入版)

竞赛任务书内容 (一)拓扑图 网页渗透 任务环境说明: 服务器场景:Server2121 服务器场景操作系统:未知(封闭靶机) 用户名:未知 密码:未知 1.访问服务器网站目录1,根据页面信息完成条件,将获取到的flag提交; 2.访问服务器网站目录2,根据页面信息完成条件,将获…

学生写字台灯用什么牌子的好?高品质学生台灯品牌推荐

学生写字台灯&#xff0c;很明显就是为学生而设计的&#xff0c;针对学生长时间学习&#xff0c;用眼强度大的特点&#xff0c;这种学生台灯在设计上对灯光的亮度、样式、护眼技术都是很有讲究的&#xff0c;为的就是保护学生眼睛&#xff0c;在一定程度上缓解眼部疲劳的作用。…

进程概念理解

既然要了解计算机的进程&#xff0c;那么就需要先了解一下计算机的底层结构 目录 冯洛伊曼体系结构 操作系统 系统调用接口 进程 PCB task_struct 内容 操作系统如何组织进程 冯洛伊曼体系结构 想了解计算机的底层结构&#xff0c;那么必定绕不开冯洛伊曼体系结构&…

19/365 java 多线程

1. 基础概念 程序&#xff1a;指令集和数据的集合。&#xff08;静态&#xff09; 进程&#xff1a;对程序的一次执行。&#xff08;动态&#xff09; 对同一个程序&#xff0c;执行两次&#xff0c;那就是两个进程。 进程是系统资源分配的基本单位 线程&#xff1a;一个进程…

gma 1.1.2 (2023.01.14) 更新日志(重大更新:开始支持空间绘图)

重大更新&#xff1a;从本版本开始&#xff0c; gma 逐步 支持空间绘图功能&#xff08;依赖 matplotlib&#xff09;&#xff01; 获取 gma 1.1.2 1、百度网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1eT2rJRiUDJuJkWeLJNL-cw?pwdb07n 提取码&#xff1a;b…

基于SIMULINK的动力电池CAN通信仿真教程

在真实的整车开发过程中&#xff0c;整车厂一般会先设计出整车网络架构&#xff0c;并依据此架构及ECU之间的功能交互设计网络总线数据库&#xff08;Database&#xff09;, 作为重要的技术文档&#xff0c;可以根据需 要全部或部分地公开给各个ECU供应商。也存在一些特殊情况&…

【渗透测试】web端姿势-前端利用

目录 前端 存在问题 关于密码重置 jwt攻击 jwt介绍 工具使用 学习来源 前端 存在问题 任意用户注册 未授权访问&#xff0c;直接访问对应链接&#xff0c;可得到系统权限 可爆破用户名 爆破用户名&#xff0c;密码 用户名注入 万能密码 用户名Xss 修改返回包信息&#…

(三)计算机组成原理——总线

文章目录&#xff08;三&#xff09;计算机组成原理——总线总线的基本概念单总线双总线面向CPU以存储器为中心总线的分类片内总线系统总线数据总线地址总线控制总线通信总线总线特性及性能指标总线特性机械特性电气特性功能特性时间特性性能指标总线标准总线结构单总线多总线双…

3.1 python高阶应用

文章目录闭包装饰器设计模式单例模式工厂模式多线程进程、线程和并行执行多线程编程网络编程服务端开发客户端开发正则表达式基础匹配元字符匹配递归闭包 def account_create(inital_account 0) :def atm(num:int,deposite:bool True) :# 声明inital_account是外部声明的init…

【Ajax】服务器的基本概念

一、客户端与服务器上网的目的通过互联网的形式来获取和消费资源。2. 服务器上网过程中&#xff0c;负责存放和对外提供资源的电脑&#xff0c;叫做服务器。3. 客户端上网过程中&#xff0c;负责获取和消费资源的电脑&#xff0c;叫做客户端。二、URL地址URL地址的概念URL&…

工业互联网2022:第一梯队成型、专精玩家突围

文|智能相对论作者|沈浪回顾2022年&#xff0c;市场依旧对工业互联网领域保持着高度的热情与专注。近期&#xff0c;IDC、Gartner等各大国际研究机构接连发布多份工业互联网相关报告&#xff0c;包括《2022年度中国工业互联网平台企业侧市场分析报告》《2022年度工业互联网平台…

唯一杰出级!百度智能云曦灵获信通院权威认证

​中国信通院公布“数字人系统评测结果” 百度智能云曦灵平台 继首批通过48项基础能力评测后 在第二轮性能分级评测中 以超高分获得行业唯一“杰出级”证书 代表了当前数字人的最高标准 该评测标准依托国际电信联盟&#xff08;ITU&#xff09;、中国通信标准化协会&#xff08…

JNPF低代码开发平台 全新版本 使用讨论 多用户商城系统源码 框架源码部署文档

JNPF快速开发平台是一套成熟的快速开发框架&#xff0c; JNPF作为承重墙&#xff0c;强大支撑保障&#xff0c;提供所有操作系统的生长土壤&#xff0c;JNPF快速开发平台采用前后端分离技术、采用B/S架构开发&#xff0c;形成一站式开发多端&#xff08;APPPC&#xff09;使用&…

【手写 Vue2.x 源码】第二十九篇 - diff算法-节点比对

一&#xff0c;前言 上篇&#xff0c;diff 算法问题分析与 patch 方法改造&#xff0c;主要涉及以下几点&#xff1a; 初始化与更新流程分析&#xff1b;问题分析与优化思路&#xff1b;新老虚拟节点比对模拟&#xff1b;patch 方法改造&#xff1b; 下篇&#xff0c;diff 算…

Mysql的锁问题:

Mysql的锁问题&#xff1a; 1.1锁的概述&#xff1a; ​ Mysql锁的机制比较简单&#xff0c;不同的存储引擎支持不同的锁机制&#xff1a;MyISAM和MEMORY存储引擎支持表级锁&#xff1b;DBD支持页面锁&#xff0c;但是它也支持表级锁&#xff1b;InnoDB既支持行级锁也支持表级…

23-1-18 文件上传

步骤 file01 / file02 分别是两台java服务 功能: 主要负责接收用户上传的文件存储在指定目录 并记录(上传时间、上传人、文件信息(大小&#xff0c;源文件名&#xff0c;存储后的文件名 ....) 文件权限(共享、私有))。负责接收处理用户的下载请求&#xff0c;用户可以根据文件…

【开发Log】C++QT连连看

1.10开发的初衷是闲来无事开了把宠物连连看&#xff0c;然后发现打了几遍第一关都过不去&#xff0c;于是想自己写个&#xff0c;这样就可以任意使用提示次数了&#xff08;bushi。其实今天正好是老妈生日&#xff0c;问了下老妈她竟然还玩连连看&#xff0c;还ak了orz。于是乎…