python写出的程序如何给别人使用-涨姿势!这些小技巧让小白也可以写出更优雅的Python代码!...
原标题:涨姿势!这些小技巧让小白也可以写出更优雅的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代码!...相关推荐
- python写出的程序如何给别人使用-利用这10个工具,你可以写出更好的Python代码...
我每天都使用这些实用程序来使我的Python代码可显示. 它们是免费且易于使用的. 编写漂亮的Python比看起来难. 作为发布工作流程的一部分,我使用以下工具使代码可显示并消除可避免的错误. 1.B ...
- 《Python 黑科技》程序员必须会的代理ip小技巧
点赞 ➕ 评论 ➕ 收藏 = 三连再看你最帅 目录 一.
- Windows小技巧12--永久关闭开机弹出的今日热点
Windows小技巧12--永久关闭开机弹出的今日热点 1 异常概述 2 解决方法 3 说明 1 异常概述 笔者最近打开Windows,发现总会自动弹出一个未知的今日热点(如下图).即便设置了永久不再 ...
- 计算机使用技巧爆文,自媒体干货篇:利用这个小技巧可以五分钟之内写好一篇爆文!...
原标题:自媒体干货篇:利用这个小技巧可以五分钟之内写好一篇爆文! 上期给大家分享了如何拟写一篇文章的爆文标题,今天就跟大家分享,如何在五分钟之内写好一篇爆文!相信大家在写文章的时候,最让人头疼的就是为 ...
- python写出的程序如何给别人使用-python如何写出表白程序
用python编表白程序的方法: 1.创建GUI窗口,实现代码的调用. 2.编写点击触发函数,实现表白程序. 具体代码如下:from tkinter import * from tkinter imp ...
- win7怎么选择java打开网页_大神研习win7系统打开网页会弹出“应用程序已被JAVA安全阻止”的修复技巧...
win7系统有很多人都喜欢使用,我们操作的过程中常常会碰到对win7系统打开网页会弹出"应用程序已被JAVA安全阻止进行设置的解决思路却鲜为人知,小编前几天就遇到了打开网页会弹出" ...
- 程序员的反击!每天一个离职小技巧
作者 | 梦想橡皮擦 来源 | 非本科程序员(ID:htmlhttp) 写在前面 俗话说的好,代码写的少,离职少不了. 最近畅游互联网,发现一些离职小技巧,读后,内心被深深的打动了,但是细细的品过之后 ...
- python编程遵循哪些规律_编程语言软件开发10个小技巧,Java、python、前端等都遵循此规律,108G资料放送中!...
随着互联网日趋迅猛,编程已经在我们生活当中无处不在了. 众所周知,程序员的工资都很不错,于是越来越多的人,都想加入到开发的行业中来. 那么,开发到底难不难学? 其实,每一门程序语言都是一个微型的完整的 ...
- python输入10个数据_分享10个数据分析的小技巧(Python)
一些小提示和小技巧可能是非常有用的,特别是在编程领域.有时候使用一点点黑客技术,既可以节省时间,还可能挽救"生命". 一个小小的快捷方式或附加组件有时真是天赐之物,并且可以成为真正 ...
最新文章
- 神经正切核,深度学习理论研究的最新热点?
- stm32f103zet6实现HTTP协议请求,UTF-8转码JSON打包上传
- atomicReference 的使用和AtomicStampedReference 解决ABA的问题
- php整型运算符,php常用运算符
- Android性能优化最佳实践,分享一点面试小经验
- springboot 微信支付接口
- 页面数据能够正常渲染,但控制台报错属性underfined
- java计算机毕业设计招聘管理系统源码+系统+mysql数据库+lw文档
- 调用百度汇率api 获取各国的汇率值
- [源码和文档分享]基于SDL类库实现的射死大鸡怪3D游戏
- python中encode和decode使用讲解与演示
- 一个实际电路的原理图是怎样设计出来的?
- 平面设计师怎么用栅格系统做好设计
- Oracle----Orcacle简介
- tsconfig.json文件报错JSON schema for the TypeScript compiler‘s configuration file
- 女子监狱第四季/全集Orange Is the New Black迅雷下载
- 【PhD Debate —11】矛与盾的对决——神经网络后门攻防
- 三菱无机房电梯故障代码查询_三菱无机房ELENESSA电梯故障代码表
- 国耀明医互联网医院:人体必需营养素维持平衡是关键
- 海康威视人脸识别设备对接(一)环境搭建
热门文章
- 大数据druid查询不支持分页_Klin、Druid、ClickHouse核心技术对比
- java版mc植物生长条件_植物生长需要的五个条件
- python需要的数学基础训练答案_新编基础训练数学答案
- dnscat使用——整体感觉这个工具不完善,失败率很高,传文件时候没有完整性校验,我自己测试时通过域名转发失败,可能是其特征过于明显导致...
- Java 转型问题(向上转型和向下转型)
- Unity3D各平台路径(包括手机内置存储路径、SD卡等等)
- js 控制展开折叠 div html dom
- 比特币交易构成(二)
- Android_NDK问题:APP_BUILD_SCRIPT points to an unknown file: project_path/jni/Android.mk
- SecondarySort 原理