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 相关文章推荐
python中字典dict常用操作方法实例总结
Apr 04 Python
在Python中处理字符串之isdigit()方法的使用
May 18 Python
Python检测生僻字的实现方法
Oct 23 Python
python3 发送任意文件邮件的实例
Jan 23 Python
Python中Numpy包的安装与使用方法简明教程
Jul 03 Python
浅谈Python批处理文件夹中的txt文件
Mar 11 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
May 16 Python
Python中的延迟绑定原理详解
Oct 11 Python
python+Selenium自动化测试——输入,点击操作
Mar 06 Python
Python通用唯一标识符uuid模块使用案例
Sep 10 Python
Python操作CSV格式文件的方法大全
Jul 15 Python
python实现双链表
May 25 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
js 处理数组重复元素示例代码
2013/12/27 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
jquery实现通用的内容渐显Tab选项卡效果
2015/09/07 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
下载给定网页上图片的方法
2014/02/18 Python
使用PDB模式调试Python程序介绍
2015/04/05 Python
python3.6+django2.0开发一套学员管理系统
2018/03/03 Python
TensorFlow变量管理详解
2018/03/10 Python
Python实现的json文件读取及中文乱码显示问题解决方法
2018/08/06 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
匡威荷兰官方网站:Converse荷兰
2018/10/24 全球购物
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
护理个人求职信范文
2014/01/08 职场文书
语文教学随笔感言
2014/02/18 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
私人房屋买卖协议书
2014/10/04 职场文书
英语教师个人总结
2015/02/09 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书
解析python中的jsonpath 提取器
2022/01/18 Python