原标题:涨姿势!这些小技巧让小白也可以写出更优雅的Python代码!

一、前言

我前两天回答了两个Python相关的问题,收到了很多赞,从答案被收藏的情况来看,确实对不少人都很有帮助,所以我也很开心。我今天准备把这个问题认真回答一下。我会先讨论什么是优美的代码;然后,我会给出一些我压箱底的好东西;最后,我会讨论怎么写出优美的代码。

二、什么是优美(优雅)的代码

什么是优美或优雅的代码实现呢?在Python里面,我们一般称之为Pythonic。Pythonic并没有一个确切的定义,一直以来都是只能意会,不能言传的东西。为了帮助新同学理解,我对Pythonic给出了明确的定义:所谓Pythonic,就是用Python的方式写出简洁优美的代码。关于Pythonic,大家可以看我个问题下的回答怎样才能写出pythonic的代码?

有了Pythonic以后,不同的工程师之间,也依然无法对优美的代码达成一致的意见。因为,美本身是一个主观感受,每个人对美的感受是不一样的。比如,有些人觉得汤唯更美,有些人觉得范冰冰最漂亮,还有些人居然喜欢AngelaBaby(一把年纪了叫baby你们不觉得怪吗?)。而我,依然最喜欢刘涛。我在这篇文章中,会给出很多具体的例子,来说明怎样写代码是'美'的,由于美是一种主观感受,所以,这里的回答可能会引起大家的争议。

另外,在这篇回答中,我们只讨论优美的Python代码实现,并不讨论Python中存在的坑。我估计Python里面有很多坑大家都没有注意到,比如:

对于这个坑,如果有特别感兴趣的同学,可以看深入理解计算机系统(原书第2版)的第二章。

三、优美的代码实现

在这一部分,我们会依次讨论一些美的代码。由于内容较多,所以,我进行了简单地分类,包括: 内置函数 、Python中的一些小细节 、充分使用数据结构的便利性、 合理使用Python的高级并发工具、 巧妙使用装饰器简化代码 、Python中的设计模式。这里还是要推荐下小编的Python学习裙:"’五八八,零九零,九四二"’不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2018最新的Python资料和0基础入门教程,欢迎初学和进阶中的小伙伴。在不忙的时间我会给大家解惑。

3.1 善用内置函数

enumerate类

enumerate是一个类,但是用起来却跟函数一样方便,为了表述方便,我们后面统称为函数。不使用enumerate可能是Python新手最容易被吐槽的地方了。enumerate其实非常简单,接收一个可迭代对象,返回index和可迭代对象中的元素的组合。

对于Python新手,推荐使用ipython(还有bpython和ptpython,感兴趣的同学也可以了解一下)交互式地测试各个函数的效果,并且,我们可以在函数后面输入一个问号,然后回车,就能够获得这个函数的帮助文档了。如下所示:

关于enumerate的效果,我们一起来看一下,你就知道为什么不使用enumerate会被吐槽了。这是不使用enumerate的时候,打印列表中的元素和元素在列表中的位置代码:

这是使用enumerate的Python代码:

这是正确使用enumerate的姿势:

去除import语句和列表的定义,实现同样的功能,不使用enumerate需要4行代码,使用enumerate只需要2行代码。如果想把代码写得简洁优美,那么,大家要时刻记住:在保证代码可读性的前提下,代码越少越好。显然,使用enumerate效果就好很多。

reversed

对Python熟悉的同学知道,Python中的列表支持切片操作,可以像L[::-1]这样去reverse列表。如下所示:

与此同时,我们也可以使用内置的reversed函数,如下所示:

我的观点是,L[::-1]不如使用reversed好,因为,L[::-1]是一个切片操作。我们看到这个代码的第一反应是序列切片,然后才是切片的效果是reverse列表。对于reversed函数,即使是刚接触Python的同学,也能够一眼看出来这个函数是要做什么事情。也就是说,实现同样的功能,L[::-1]比reversed多绕了一个弯。我们这个问题是如何写出优美的代码,而我认为,优美的代码就应该简洁、直接、少绕弯。 读者如果对我这里的解释表示怀疑的话,我表示理解。但是,我还是想劝你认可我的说法。因为我认为,不管我们使用代码还是文字,都是在表达某些东西。而我的表达能力,也是读研究生以后写论文锻炼出来的。就我目前比大多数人强的表达能力来说,我以我母校的荣誉保证,reversed确实比L[::-1]好。

3.2 Python中的小细节

这一节我们来看3个很小的知识点。

raise SystemExit

假设你现在要实现一个需求,在程序检测到某种错误的时候,打印错误信息,并退出程序。在Python中,我们可以是SystemExit,如下所示:

但是,你其实可以直接这么用的:

raise SystemExit('It failed!')

后面的这个操作会直接将信息打印到标准错误输出,然后使用退出码为1来退出程序,以表示程序没有正常退出。

文件的x模式

大家应该知道,如果我们以w模式打开一个文件进行写入的话,文件的内容将会被我们覆盖掉。假设你现在有这样一个需求:写一个文件,如果该文件已经存在,则不写。实现方式也很简单,我们先判断一下文件是否存在,如果已经存在,则打印提示信息并跳过,否则,我们就以w模式打开文件,然后写入内容。如下所示:

如果我们使用x模式的话,代码能够好看很多,如下所示:

ConfigParser

上面两个例子知道的人可能比较多,这个例子知道的人可能就不多了。在大部分服务中,会将如数据库连接参数这样的配置,写到配置文件中,然后使用ConfigParser来管理。连接数据库的时候,我们可以读取配置参数,然后生成连接字符串。其实,ConfigParser本身就提供了生成连接字符串的功能,如下所示:

这里给出了几个Python中的小细节,可能很多人会觉得没啥用,又或者大家其实已经知道了。但是,我还是把这一节放上来了,只要对一个人有用,那么,这就是有意义的。返回搜狐,查看更多

责任编辑:

python写出的程序如何给别人使用-涨姿势!这些小技巧让小白也可以写出更优雅的Python代码!...相关推荐

  1. python写出的程序如何给别人使用-利用这10个工具,你可以写出更好的Python代码...

    我每天都使用这些实用程序来使我的Python代码可显示. 它们是免费且易于使用的. 编写漂亮的Python比看起来难. 作为发布工作流程的一部分,我使用以下工具使代码可显示并消除可避免的错误. 1.B ...

  2. 《Python 黑科技》程序员必须会的代理ip小技巧

    点赞 ➕ 评论 ➕ 收藏 = 三连再看你最帅 目录 一.

  3. Windows小技巧12--永久关闭开机弹出的今日热点

    Windows小技巧12--永久关闭开机弹出的今日热点 1 异常概述 2 解决方法 3 说明 1 异常概述 笔者最近打开Windows,发现总会自动弹出一个未知的今日热点(如下图).即便设置了永久不再 ...

  4. 计算机使用技巧爆文,自媒体干货篇:利用这个小技巧可以五分钟之内写好一篇爆文!...

    原标题:自媒体干货篇:利用这个小技巧可以五分钟之内写好一篇爆文! 上期给大家分享了如何拟写一篇文章的爆文标题,今天就跟大家分享,如何在五分钟之内写好一篇爆文!相信大家在写文章的时候,最让人头疼的就是为 ...

  5. python写出的程序如何给别人使用-python如何写出表白程序

    用python编表白程序的方法: 1.创建GUI窗口,实现代码的调用. 2.编写点击触发函数,实现表白程序. 具体代码如下:from tkinter import * from tkinter imp ...

  6. win7怎么选择java打开网页_大神研习win7系统打开网页会弹出“应用程序已被JAVA安全阻止”的修复技巧...

    win7系统有很多人都喜欢使用,我们操作的过程中常常会碰到对win7系统打开网页会弹出"应用程序已被JAVA安全阻止进行设置的解决思路却鲜为人知,小编前几天就遇到了打开网页会弹出" ...

  7. 程序员的反击!每天一个离职小技巧

    作者 | 梦想橡皮擦 来源 | 非本科程序员(ID:htmlhttp) 写在前面 俗话说的好,代码写的少,离职少不了. 最近畅游互联网,发现一些离职小技巧,读后,内心被深深的打动了,但是细细的品过之后 ...

  8. python编程遵循哪些规律_编程语言软件开发10个小技巧,Java、python、前端等都遵循此规律,108G资料放送中!...

    随着互联网日趋迅猛,编程已经在我们生活当中无处不在了. 众所周知,程序员的工资都很不错,于是越来越多的人,都想加入到开发的行业中来. 那么,开发到底难不难学? 其实,每一门程序语言都是一个微型的完整的 ...

  9. python输入10个数据_分享10个数据分析的小技巧(Python)

    一些小提示和小技巧可能是非常有用的,特别是在编程领域.有时候使用一点点黑客技术,既可以节省时间,还可能挽救"生命". 一个小小的快捷方式或附加组件有时真是天赐之物,并且可以成为真正 ...

最新文章

  1. 神经正切核,深度学习理论研究的最新热点?
  2. stm32f103zet6实现HTTP协议请求,UTF-8转码JSON打包上传
  3. atomicReference 的使用和AtomicStampedReference 解决ABA的问题
  4. php整型运算符,php常用运算符
  5. Android性能优化最佳实践,分享一点面试小经验
  6. springboot 微信支付接口
  7. 页面数据能够正常渲染,但控制台报错属性underfined
  8. java计算机毕业设计招聘管理系统源码+系统+mysql数据库+lw文档
  9. 调用百度汇率api 获取各国的汇率值
  10. [源码和文档分享]基于SDL类库实现的射死大鸡怪3D游戏
  11. python中encode和decode使用讲解与演示
  12. 一个实际电路的原理图是怎样设计出来的?
  13. 平面设计师怎么用栅格系统做好设计
  14. Oracle----Orcacle简介
  15. tsconfig.json文件报错JSON schema for the TypeScript compiler‘s configuration file
  16. 女子监狱第四季/全集Orange Is the New Black迅雷下载
  17. 【PhD Debate —11】矛与盾的对决——神经网络后门攻防
  18. 三菱无机房电梯故障代码查询_三菱无机房ELENESSA电梯故障代码表
  19. 国耀明医互联网医院:人体必需营养素维持平衡是关键
  20. 海康威视人脸识别设备对接(一)环境搭建

热门文章

  1. 大数据druid查询不支持分页_Klin、Druid、ClickHouse核心技术对比
  2. java版mc植物生长条件_植物生长需要的五个条件
  3. python需要的数学基础训练答案_新编基础训练数学答案
  4. dnscat使用——整体感觉这个工具不完善,失败率很高,传文件时候没有完整性校验,我自己测试时通过域名转发失败,可能是其特征过于明显导致...
  5. Java 转型问题(向上转型和向下转型)
  6. Unity3D各平台路径(包括手机内置存储路径、SD卡等等)
  7. js 控制展开折叠 div html dom
  8. 比特币交易构成(二)
  9. Android_NDK问题:APP_BUILD_SCRIPT points to an unknown file: project_path/jni/Android.mk
  10. SecondarySort 原理