侵权投诉

关于Python18个你不知道的高效编程技巧

马哥Linux运维 2021-10-15 11:23 次阅读

初识c++fans.com/tags/python/' target='_blank' class='arckwlink_hide'>Python语言,觉得python满足了我上学时候对编程语言的所有要求。python语言的高效编程技巧让我们这些大学曾经苦逼学了四年c或者c++的人,兴奋的不行不行的,终于解脱了。高级语言,如果做不到这样,还扯啥高级呢?

01 交换变量


		

>>>a=3 >>>b=6

这个情况如果要交换变量在c++中,肯定需要一个空变量。但是python不需要,只需一行,大家看清楚了


		

>>>a,b=b,a >>>print(a)>>>6 >>>ptint(b)>>>5

02 字典推导(Dictionary comprehensions)和集合推导(Set comprehensions)

大多数的Python程序员都知道且使用过列表推导(list comprehensions)。如果你对list comprehensions概念不是很熟悉——一个list comprehension就是一个更简短、简洁的创建一个list的方法。


		

>>>some_list=[1,2,3,4,5] >>>another_list=[x+1forxinsome_list] >>>another_list [2,3,4,5,6]

自从python 3.1 起,我们可以用同样的语法来创建集合和字典表:


		

>>>#SetComprehensions >>>some_list=[1,2,3,4,5,2,5,1,4,8] >>>even_set={xforxinsome_listifx%2==0} >>>even_set set([8,2,4]) >>>#DictComprehensions >>>d={x:x%2==0forxinrange(1,11)} >>>d {1:False,2:True,3:False,4:True,5:False,6:True,7:False,8:True,9:False,10:True}

在第一个例子里,我们以some_list为基础,创建了一个具有不重复元素的集合,而且集合里只包含偶数。而在字典表的例子里,我们创建了一个key是不重复的1到10之间的整数,value是布尔型,用来指示key是否是偶数。

这里另外一个值得注意的事情是集合的字面量表示法。我们可以简单的用这种方法创建一个集合:


		

>>>my_set={1,2,1,2,3,4} >>>my_set set([1,2,3,4])

而不需要使用内置函数set()。

03 计数时使用Counter计数对象。

这听起来显而易见,但经常被人忘记。对于大多数程序员来说,数一个东西是一项很常见的任务,而且在大多数情况下并不是很有挑战性的事情——这里有几种方法能更简单的完成这种任务。

Python的collections类库里有个内置的dict类的子类,是专门来干这种事情的:


		

>>>fromcollectionsimportCounter >>>c=Counter( helloworld ) >>>c Counter({ l :3, o :2, :1, e :1, d :1, h :1, r :1, w :1}) >>>c.most_common(2) [( l ,3),( o ,2)]

04 漂亮的打印出JSON

JSON是一种非常好的数据序列化的形式,被如今的各种API和web service大量的使用。使用python内置的json处理,可以使JSON串具有一定的可读性,但当遇到大型数据时,它表现成一个很长的、连续的一行时,人的肉眼就很难观看了。

为了能让JSON数据表现的更友好,我们可以使用indent参数来输出漂亮的JSON。当在控制台交互式编程或做日志时,这尤其有用:


		

>>>importjson >>>print(json.dumps(data))#Noindention {"status":"OK","count":2,"results":[{"age":27,"name":"Oz","lactose_intolerant":true},{"age":29,"name":"Joe","lactose_intolerant":false}]} >>>print(json.dumps(data,indent=2))#Withindention { "status":"OK", "count":2, "results":[ { "age":27, "name":"Oz", "lactose_intolerant":true }, { "age":29, "name":"Joe", "lactose_intolerant":false } ] }

同样,使用内置的pprint模块,也可以让其它任何东西打印输出的更漂亮。

05解决FizzBuzz

前段时间Jeff Atwood 推广了一个简单的编程练习叫FizzBuzz,问题引用如下:

写一个程序,打印数字1到100,3的倍数打印“Fizz”来替换这个数,5的倍数打印“Buzz”,对于既是3的倍数又是5的倍数的数字打印“FizzBuzz”。

这里就是一个简短的,有意思的方法解决这个问题:


		

forxinrange(1,101): print"fizz"[x%3*len( fizz )::]+"buzz"[x%5*len( buzz )::]orx

06 if 语句在行内


		

print"Hello"ifTrueelse"World" >>>Hello

07 连接

下面的最后一种方式在绑定两个不同类型的对象时显得很cool。


		

nfc=["Packers","49ers"] afc=["Ravens","Patriots"] printnfc+afc >>>[ Packers , 49ers , Ravens , Patriots ] printstr(1)+"world" >>>1world print`1`+"world" >>>1world print1,"world" >>>1world printnfc,1 >>>[ Packers , 49ers ]1

08 数值比较

这是我见过诸多语言中很少有的如此棒的简便法


		

x=2 if3>x>1: printx >>>2 if1< x >0: printx >>>2

09 同时迭代两个列表


		

nfc=["Packers","49ers"] afc=["Ravens","Patriots"] forteama,teambinzip(nfc,afc): printteama+"vs."+teamb >>>Packersvs.Ravens >>>49ersvs.Patriots

10 带索引的列表迭代


		

teams=["Packers","49ers","Ravens","Patriots"] forindex,teaminenumerate(teams): printindex,team >>>0Packers >>>149ers >>>2Ravens >>>3Patriots

11 列表推导式

已知一个列表,我们可以刷选出偶数列表方法:


		

numbers=[1,2,3,4,5,6] even=[] fornumberinnumbers: ifnumber%2==0: even.append(number)

转变成如下:


		

numbers=[1,2,3,4,5,6] even=[numberfornumberinnumbersifnumber%2==0]

12 字典推导

和列表推导类似,字典可以做同样的工作:


		

teams=["Packers","49ers","Ravens","Patriots"] print{key:valueforvalue,keyinenumerate(teams)} >>>{ 49ers :1, Ravens :2, Patriots :3, Packers :0}

13 初始化列表的值


		

items=[0]*3 printitems >>>[0,0,0]

14 列表转换为字符


		

teams=["Packers","49ers","Ravens","Patriots"] print",".join(teams) >>> Packers,49ers,Ravens,Patriots

15 从字典中获取元素

我承认try/except代码并不雅致,不过这里有一种简单方法,尝试在字典中找key,如果没有找到对应的alue将用第二个参数设为其变量值。


		

data={ user :1, name : Max , three :4} try: is_admin=data[ admin ] exceptKeyError: is_admin=False

替换成这样


		

data={ user :1, name : Max , three :4} is_admin=data.get( admin ,False)

16 获取列表的子集

有时,你只需要列表中的部分元素,这里是一些获取列表子集的方法。


		

x=[1,2,3,4,5,6] #前3个 printx[:3] >>>[1,2,3] #中间4个 printx[1:5] >>>[2,3,4,5] #最后3个 printx[3:] >>>[4,5,6] #奇数项 printx[::2] >>>[1,3,5] #偶数项 printx[1::2] >>>[2,4,6]

除了python内置的数据类型外,在collection模块同样还包括一些特别的用例,在有些场合Counter非常实用。如果你参加过在这一年的Facebook HackerCup,你甚至也能找到他的实用之处。


		

fromcollectionsimportCounter printCounter("hello") >>>Counter({ l :2, h :1, e :1, o :1})

17 迭代工具

和collections库一样,还有一个库叫itertools,对某些问题真能高效地解决。其中一个用例是查找所有组合,他能告诉你在一个组中元素的所有不能的组合方式


		

fromitertoolsimportcombinations teams=["Packers","49ers","Ravens","Patriots"] forgameincombinations(teams,2): printgame >>>( Packers , 49ers ) >>>( Packers , Ravens ) >>>( Packers , Patriots ) >>>( 49ers , Ravens ) >>>( 49ers , Patriots ) >>>( Ravens , Patriots )

18 False == True

比起实用技术来说这是一个很有趣的事,在python中,True和False是全局变量,因此:


		

False=True ifFalse: print"Hello" else: print"World" >>>Hello

文章转载:python数据科学(版权归原作者所有,侵删)

编辑:jq

原文标题:18 个 Python 高效编程技巧,Mark!

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

python实现CH340串口通信(超详细)

代码实现CH340串口通信 UARTUART全称为Universal Asynchronous Re....
发表于 11-26 20:51 7次 阅读
python实现CH340串口通信(超详细)

完整 Python 鸿蒙设备开发课件

唐佐林直播资料,需要的小伙伴自行下载哦,内容包括:完 整P y t h o n 框架简介、P Y 4 O H -、R E P L 用法简介、定制...
发表于 11-26 18:58 276次 阅读
完整 Python 鸿蒙设备开发课件

单片机内部是什么类型的Flash?

作者 |strongerHuang微信公众号 | 嵌入式专栏Flash在我们生活中无处不在,比如:U....
发表于 11-26 18:21 4次 阅读
单片机内部是什么类型的Flash?

什么是网络认证技术

认证是指用户采用某种方式来证明自己确实是自己宣称的某人,网络中的认证主要包括身份认证和消息认证。身份....
的头像 讯维官方公众号 发表于 11-26 16:21 301次 阅读

Maix Bit K210点灯【保姆级教程】

上一篇K210有8个GPIO(通用IO)、32个高速GPIOHS(高速IO)。无论是GPIO还是GP....
发表于 11-26 16:21 2次 阅读
Maix Bit K210点灯【保姆级教程】

STM32F10X系列通用OTA bootloader移植与使用指南

基于STM32F10X系列通用OTA bootloader原理、移植与使用全指南 写在前面这几天我都....
发表于 11-26 16:06 5次 阅读
STM32F10X系列通用OTA bootloader移植与使用指南

我的mcu通用库(paMcuLib

paMcuLibIntro(介绍这是一个我用来封装我用过的单片机,并且统一模块接口的库为了实现更好的....
发表于 11-26 15:21 7次 阅读
我的mcu通用库(paMcuLib

单片机就那点资源,为啥还要用RTOS?

对于搞单片机的特别用8051系列工程师来说,谈到单片机的RTOS,很多时候会问一句:“为什么要用RT....
发表于 11-26 14:36 5次 阅读
单片机就那点资源,为啥还要用RTOS?

STM32系统bootloader应用

嵌入式开发中,经常需要bootloader进行程序固件升级和系统维护,所以bootloader是必不....
发表于 11-26 13:36 5次 阅读
STM32系统bootloader应用

c与变量、常量、表达式和语句

0.0 程序块在c语言中{ 多条声明 多条语句} 程序块这种复合语句叫程序块。接下来我们就开始....
发表于 11-26 13:21 4次 阅读
c与变量、常量、表达式和语句

IoT嵌入式软件--程序结构

“从毕业到工作的这10年的时间,自己使用的单片机架构也在升级,从最初的前后台顺序执行到时间片轮转调度....
发表于 11-26 13:06 19次 阅读
IoT嵌入式软件--程序结构

【MSP430时钟】MSP430 5438时钟系统介绍

3.1时钟系统介绍 UCS模块支持低功耗。它内部含有三个时钟信号,用户可以自行选择,找到性能和功耗的....
发表于 11-26 13:06 10次 阅读
【MSP430时钟】MSP430 5438时钟系统介绍

CubeMX生成的STM32F4xx MDK工程FPU和DSP库的使用

CubeMX生成的STM32F4xx MDK工程FPU和DSP库的使用STM32F4xx属于Cort....
发表于 11-26 10:21 2次 阅读
CubeMX生成的STM32F4xx MDK工程FPU和DSP库的使用

MSP430 5438 单片机学习笔记(鱼香茄子)

标签: 单片机 单片机MSP430F5438学习笔记 通过430一年的学习遇到的很多问题,也收....
发表于 11-26 09:51 4次 阅读
MSP430 5438 单片机学习笔记(鱼香茄子)

如何让STM32的闹钟程序每天固定时间醒来呢

如何让STM32的闹钟程序每天固定时间醒来呢?
发表于 11-26 07:58 0次 阅读

怎样在STM8的C语言编程环境中新建一个工程呢

使用STM8的C语言编程有哪些好处? 怎样在STM8的C语言编程环境中新建一个工程呢? ...
发表于 11-26 07:58 0次 阅读

STM32单片机编程真的很难吗

STM32单片机编程对很多新手来说就像”天书”。我当初是学习了51单片机,然后就去找工作了,这已经是10年前了。刚进入公司,老...
发表于 11-26 07:49 0次 阅读

利用Jflash给芯片编程

利用Jflash给芯片编程
发表于 11-26 07:26 0次 阅读

怎样做stm32f103c8t6系统才能成功抵达main函数呢

stm32f103c8t6系统启动的流程是怎样的? 怎样做stm32f103c8t6系统才能成功抵达main函数呢?...
发表于 11-26 07:22 0次 阅读

HAL_MspInit和HAL_MspDeInit函数有何作用呢

HAL_MspInit和HAL_MspDeInit函数有何作用呢? 如何对USB结构体句柄进行初始化呢? ...
发表于 11-26 07:12 0次 阅读

8位单片机定义一个 int型变量,占几个字节

关注+星标公众号,不错过精彩内容作者 | strongerHuang微信公众号|嵌入式专栏首先问大家两个问题:8位单片机定义一个 int型变量...
发表于 11-26 07:04 0次 阅读

SystemInit函数中设置的系统时钟大小是多少

SystemInit函数中设置的系统时钟大小是多少
发表于 11-26 06:39 0次 阅读

怎样将stm32串口格式化打印字符串的函数进行封装呢

怎样将stm32串口格式化打印字符串的函数进行封装呢?...
发表于 11-26 06:38 0次 阅读

用STM32F401和nRF24L01制作无线调速小车

硬件配置在做这个小项目前, 考察过STM32F103C8T6, STM32F401CCU6和STC8....
发表于 11-25 20:51 9次 阅读
用STM32F401和nRF24L01制作无线调速小车

MCU与B/S、C/S架构之间的数据传输关系

设计主要流程:一、MCU通过串口发送数据到WIFI模块(esp8266)上二、启动WIFI模块,设置....
发表于 11-25 19:06 6次 阅读
MCU与B/S、C/S架构之间的数据传输关系

C51_PID 水温控制系统

前言通过C语言程序写入51单片机实现水的温度的采集,并通过控制器控制加热器给水体加热,对水体的温进行....
发表于 11-25 18:06 14次 阅读
C51_PID 水温控制系统

基于收发一体超声波探头的超声波测距方案(附源代码和原理图)

基于收发一体超声波探头的超声波测距方案基于收发一体超声波探头的超声波测距方案采用STC89R52单片....
发表于 11-25 17:51 5次 阅读
基于收发一体超声波探头的超声波测距方案(附源代码和原理图)

利用STC89C52控制ROS中的海龟

实现过程:1、单片机程序编序(C语言)STC89C52单片机 晶振频率11.0592MHz2、ubu....
发表于 11-25 16:51 4次 阅读
利用STC89C52控制ROS中的海龟

在 microPython 上搭建 HTTP WEB 服务器 esp8266 esp32

在microPython上搭建一个简单的HTTP WEB服务器microPython给会使用Pyth....
发表于 11-25 14:06 9次 阅读
在 microPython 上搭建 HTTP WEB 服务器 esp8266 esp32

让步进电机动起来——L298N驱动步进电机

文章目录步进电机特点:步进电机相关概念:相关问题:L298N主要参数说明L298N原理图应用实例驱动....
发表于 11-25 10:21 7次 阅读
让步进电机动起来——L298N驱动步进电机

LCD液晶显示屏显示字符左右移动的程序

lcd_1602 指令汇总0x28 设置 162 显示, 57 点阵, 4 位数据接口0x38 ....
发表于 11-24 21:06 17次 阅读
LCD液晶显示屏显示字符左右移动的程序

MSP432程序延迟函数失效问题

抽奖中了一个MSP432E401Y的开发板, 调试官方例程的时候发现, blinkLED的代码不会b....
发表于 11-24 20:21 4次 阅读
MSP432程序延迟函数失效问题

【ct107d】单片机中断

概述:中断是单片机不可或缺的一种功能,何为中断,以我的理解举一个例子:当
发表于 11-24 16:36 2次 阅读
【ct107d】单片机中断

EVB_Air724UG_A13开发板使用指南

  Air724 是上海合宙物联网于2020年3月下旬发布的一款基于UIS8910DM芯片组的物联网....
发表于 11-24 14:51 17次 阅读
EVB_Air724UG_A13开发板使用指南

Proteus8.9 仿真STM32407ZGT6系列001_走马灯

一, 打开模板文件(可以随文下载放置在文档中打开)。(如下图1所示)图1二,点击Source Cod....
发表于 11-24 13:36 4次 阅读
Proteus8.9 仿真STM32407ZGT6系列001_走马灯

单片机与单片机,怎样“交谈”?

几种常用单片机之间的通信方式①采用硬件 UART 进行异步串行通信。这是一种占用口线少,有效、可靠的....
发表于 11-24 13:06 5次 阅读
单片机与单片机,怎样“交谈”?

轻松学!如何通过proteus仿真,利用74HC595输出数据?

一、重要的若干引脚描述Q1--Q7:并行数据输出引脚 Q7':串行输出引脚(可以用于多片7....
发表于 11-24 10:06 8次 阅读
轻松学!如何通过proteus仿真,利用74HC595输出数据?

Go 语言在极小硬件上的运用(三) | Linux 中国

导读:让我们做些更有趣的事情……让我们点亮更多的 LED!                     ....
发表于 11-23 18:21 6次 阅读
Go 语言在极小硬件上的运用(三) | Linux 中国

TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植

1、详细介绍了touchgfx4.13在cubemx5.5版本下的常规移植;2、分享了一些touch....
发表于 11-23 18:21 10次 阅读
TouchGFX4.13移植及编程指南 - 源码分享 - cubemx5.5下的常规移植 及 RT-Thread的移植

自制STC单片机下载电路,再也不用人工干预了

关注+星标公众号,不错过精彩内容来源 |TsinghuaJokingSTC单片机的程序下载使用ISP....
发表于 11-23 18:07 29次 阅读
自制STC单片机下载电路,再也不用人工干预了

单片机基础编程——“流星雨”(keil4、proteus)

实验要求:实现“流星雨”的变化效率,即先从最上面的灯开始加1点亮,到8只灯全部点亮后,先从最上面的灯....
发表于 11-23 18:06 7次 阅读
单片机基础编程——“流星雨”(keil4、proteus)

STM32中按键中断分析

在按键学习中,我们有用到查询的方法来判断按键事件是否发生,这种查询按键事件适用于程序工作量较少的情况....
发表于 11-23 18:06 4次 阅读
STM32中按键中断分析

【编程之美】详论单片机固件模块化架构设计

关注、星标嵌入式客栈,干货及时送达ID:嵌入式客栈作者:逸君[导读] 为什么写本文?最近遇到一些初学....
发表于 11-23 17:51 4次 阅读
【编程之美】详论单片机固件模块化架构设计

单片机为什么一直用C语言,不用其他编程语言?只有学过的知道!

单片机为什么还在用C语言编程?答案是:C语言是最适合单片机编程的高级语言。这个问题的意思应该是:现在....
发表于 11-23 17:51 9次 阅读
单片机为什么一直用C语言,不用其他编程语言?只有学过的知道!

单片机c语言+编程c语言_C和C ++编程语言有什么区别?

单片机c语言+编程c语言C & C++ are computer programming langu....
发表于 11-23 17:51 10次 阅读
单片机c语言+编程c语言_C和C ++编程语言有什么区别?

单片机工程模块化操作_适用单片机编程新手

对于一些接触单片机编程不久的小萌新来说,模块化编程这个概念刚接触的时候可能会很懵,到底什么是模块化编....
发表于 11-23 17:51 10次 阅读
单片机工程模块化操作_适用单片机编程新手

CC3200 外设引脚分配汇总

主要是展示了CC3200 外设引脚分配的关系,包括引脚、信号名称、模式值、信号描述等信息。
发表于 11-23 17:51 6次 阅读
CC3200 外设引脚分配汇总

使用OPENMV控制云台自动追踪Apriltag,测出与Apriltag距离并且通过串口发送给单片机。

使用openmv控制云台自动跟踪Apriltag,并且将openmv与Apriltag距离通过串口发....
发表于 11-23 17:51 8次 阅读
使用OPENMV控制云台自动追踪Apriltag,测出与Apriltag距离并且通过串口发送给单片机。

OLED自定义显示图像实验(基础->进阶)

目录OLED显示实验(8080接口方式)OLED接口说明读写流程简述SSD1306 的 8080 并....
发表于 11-23 17:51 4次 阅读
OLED自定义显示图像实验(基础->进阶)

移植IIC 0.96OLED(SSD1306)驱动到MicropPython(esp32)

概述因为esp32 micropython中没有SSD_1306驱动代码遂决定移植arduino平台....
发表于 11-23 17:51 6次 阅读
移植IIC 0.96OLED(SSD1306)驱动到MicropPython(esp32)

51单片机学习笔记(郭天祥版)(9)——IIC、EEPROM

IIC是两根线,单总线,只有一根数据线,发送数据和读取收据都是一根线,像我们之前学的AD、DA都是许....
发表于 11-23 17:51 16次 阅读
51单片机学习笔记(郭天祥版)(9)——IIC、EEPROM

用Linux树莓派来读取JY61的串口数据

简述有很多的小伙伴说用Linux树莓派来读取JY61的串口数据不知道怎么操作。今天我和大家分享下我是....
发表于 11-23 17:51 4次 阅读
用Linux树莓派来读取JY61的串口数据

状态机——单片机的万能语言(附代码)

Python实战社群Java实战社群长按识别下方二维码,按需求添加扫码关注添加客服进Python社群....
发表于 11-23 17:36 6次 阅读
状态机——单片机的万能语言(附代码)

状态机——单片机的万能语言(附代码)

毫无疑问,单片机的万能语言就是状态机,在嵌入式单片机编程中,也是我们常用的方法。在此之前,我曾分享过....
发表于 11-23 17:36 4次 阅读
状态机——单片机的万能语言(附代码)

状态机——单片机的万能语言(附代码)

关注、星标公众号,直达精彩内容ID:技术让梦想更伟大作者:李肖遥毫无疑问,单片机的万能语言就是状态机....
发表于 11-23 17:36 6次 阅读
状态机——单片机的万能语言(附代码)

AES加密 单片机数据实测

用单片机测试以下代码,加解密OK;aes,c 文件#include "AES.h"#include ....
发表于 11-23 17:36 2次 阅读
AES加密  单片机数据实测

C++ 单片机-上位机-串口收发-COM收发

C++ 单片机-上位机-串口收发-COM收发属性值平台Win10IDEVS2019语言C++功能:读....
发表于 11-23 17:36 6次 阅读
C++ 单片机-上位机-串口收发-COM收发

单片机补充案例--按键点灯

这是一个及其简单的案例,按下key点亮led,为什么还要补充呢?1. 输入和输出2. 数字量/***....
发表于 11-23 17:21 6次 阅读
单片机补充案例--按键点灯

52单片机制作打卡考勤+测温一体系统(含后端管理平台)

52单片机制作打卡考勤+测温一体系统(含后端管理平台)技术要求python+flask+tcp基础(....
发表于 11-23 17:06 8次 阅读
52单片机制作打卡考勤+测温一体系统(含后端管理平台)