15个Pythonic的代码示例(值得收藏)


Posted in Python onOctober 29, 2020

Python由于语言的简洁性,让我们以人类思考的方式来写代码,新手更容易上手,老鸟更爱不释手。

要写出 Pythonic(优雅的、地道的、整洁的)代码,还要平时多观察那些大牛代码,Github 上有很多非常优秀的源代码值得阅读,比如:requests、flask、tornado,这里小明收集了一些常见的 Pythonic 写法,帮助你养成写优秀代码的习惯。

01. 变量交换

Bad

tmp = a
a = b
b = tmp

Pythonic

a,b = b,a

02. 列表推导

Bad

my_list = []
for i in range(10):
  my_list.append(i*2)

Pythonic

my_list = [i*2 for i in range(10)]

03. 单行表达式

虽然列表推导式由于其简洁性及表达性,被广受推崇。

但是有许多可以写成单行的表达式,并不是好的做法。

Bad

print 'one'; print 'two'

if x == 1: print 'one'

if <complex comparison> and <other complex comparison>:
  # do something

Pythonic

print 'one'
print 'two'

if x == 1:
  print 'one'

cond1 = <complex comparison>
cond2 = <other complex comparison>
if cond1 and cond2:
  # do something

04. 带索引遍历

Bad

for i in range(len(my_list)):
  print(i, "-->", my_list[i])

Pythonic

for i,item in enumerate(my_list):
  print(i, "-->",item)

05. 序列解包

Pythonic

a, *rest = [1, 2, 3]
# a = 1, rest = [2, 3]

a, *middle, c = [1, 2, 3, 4]
# a = 1, middle = [2, 3], c = 4

06. 字符串拼接

Bad

letters = ['s', 'p', 'a', 'm']
s=""
for let in letters:
  s += let

Pythonic

letters = ['s', 'p', 'a', 'm']
word = ''.join(letters)

07. 真假判断

Bad

if attr == True:
  print 'True!'

if attr == None:
  print 'attr is None!'

Pythonic

if attr:
  print 'attr is truthy!'

if not attr:
  print 'attr is falsey!'

if attr is None:
  print 'attr is None!'

08. 访问字典元素

Bad

d = {'hello': 'world'}
if d.has_key('hello'):
  print d['hello']  # prints 'world'
else:
  print 'default_value'

Pythonic

d = {'hello': 'world'}

print d.get('hello', 'default_value') # prints 'world'
print d.get('thingy', 'default_value') # prints 'default_value'

# Or:
if 'hello' in d:
  print d['hello']

09. 操作列表

Bad

a = [3, 4, 5]
b = []
for i in a:
  if i > 4:
    b.append(i)

Pythonic

a = [3, 4, 5]
b = [i for i in a if i > 4]
# Or:
b = filter(lambda x: x > 4, a)

Bad

a = [3, 4, 5]
for i in range(len(a)):
  a[i] += 3

Pythonic

a = [3, 4, 5]
a = [i + 3 for i in a]
# Or:
a = map(lambda i: i + 3, a)

10. 文件读取

Bad

f = open('file.txt')
a = f.read()
print a
f.close()

Pythonic

with open('file.txt') as f:
  for line in f:
    print line

11. 代码续行

Bad

my_very_big_string = """For a long time I used to go to bed early. Sometimes, \
  when I had put out my candle, my eyes would close so quickly that I had not even \
  time to say “I'm going to sleep.”"""

from some.deep.module.inside.a.module import a_nice_function, another_nice_function, \
  yet_another_nice_function

Pythonic

my_very_big_string = (
  "For a long time I used to go to bed early. Sometimes, "
  "when I had put out my candle, my eyes would close so quickly "
  "that I had not even time to say “I'm going to sleep.”"
)

from some.deep.module.inside.a.module import (
  a_nice_function, another_nice_function, yet_another_nice_function)

12. 显式代码

Bad

def make_complex(*args):
  x, y = args
  return dict(**locals())

Pythonic

def make_complex(x, y):
  return {'x': x, 'y': y}

13. 使用占位符

Pythonic

filename = 'foobar.txt'
basename, _, ext = filename.rpartition('.')

14. 链式比较

Bad

if age > 18 and age < 60:
  print("young man")

Pythonic

if 18 < age < 60:
  print("young man")

理解了链式比较操作,那么你应该知道为什么下面这行代码输出的结果是 False

>>> False == False == True 
False

15. 三目运算

这个保留意见。随使用习惯就好。

Bad

if a > 2:
  b = 2
else:
  b = 1
#b = 2

Pythonic

a = 3  

b = 2 if a > 2 else 1
#b = 2

参考文档
http://docs.python-guide.org/en/latest/writing/style/
https://foofish.net/idiomatic_part2.html

到此这篇关于15个Pythonic的代码示例(值得收藏)的文章就介绍到这了,更多相关Pythonic代码内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
PyQt5每天必学之切换按钮
Aug 20 Python
python判断输入日期为第几天的实例
Nov 13 Python
python 列表转为字典的两个小方法(小结)
Jun 28 Python
在VS2017中用C#调用python脚本的实现
Jul 31 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
python3.6生成器yield用法实例分析
Aug 23 Python
python环境下安装opencv库的方法
Mar 05 Python
Python中and和or如何使用
May 28 Python
Keras 实现加载预训练模型并冻结网络的层
Jun 15 Python
matplotlib图例legend语法及设置的方法
Jul 28 Python
python3实现飞机大战
Nov 29 Python
Python结合百度语音识别实现实时翻译软件的实现
Jan 18 Python
python 如何设置守护进程
Oct 29 #Python
python 多线程中join()的作用
Oct 29 #Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 #Python
python 实现音频叠加的示例
Oct 29 #Python
详解python的super()的作用和原理
Oct 29 #Python
Python生成pdf目录书签的实例方法
Oct 29 #Python
利用python清除移动硬盘中的临时文件
Oct 28 #Python
You might like
PHP 遍历文件实现代码
2011/05/04 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
PHP 实现链式操作
2021/03/09 PHP
js 实现菜单上下显示附效果图
2013/11/21 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
Jquery网页内滑动缓冲导航的实现代码
2015/04/05 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
详解JavaScript权威指南之对象
2016/09/27 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
Javascript仿京东放大镜的效果
2017/03/01 Javascript
JavaScript数据结构之二叉树的遍历算法示例
2017/04/13 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
zTree节点文字过多的处理方法
2017/11/24 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
layui table 参数设置方法
2018/08/14 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
python飞机大战 pygame游戏创建快速入门详解
2019/12/17 Python
Python Des加密解密如何实现软件注册码机器码
2020/01/08 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
解决keras模型保存h5文件提示无此目录问题
2020/07/01 Python
如何通过命令行进入python
2020/07/06 Python
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
投资入股合作协议书
2014/10/28 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
2015年化验室工作总结
2015/04/23 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书
Python基础之元组与文件知识总结
2021/05/19 Python