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中的类,对象,方法,属性
Sep 11 Python
Python简单删除列表中相同元素的方法示例
Jun 12 Python
Python中字典和集合学习小结
Jul 07 Python
Python字符串拼接六种方法介绍
Dec 18 Python
django缓存配置的几种方法详解
Jul 16 Python
python对日志进行处理的实例代码
Oct 06 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
Python线性拟合实现函数与用法示例
Dec 13 Python
python pytest进阶之conftest.py详解
Jun 27 Python
对Django中内置的User模型实例详解
Aug 16 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
May 17 Python
pycharm如何使用anaconda中的各种包(操作步骤)
Jul 31 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写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
php获取当前月与上个月月初及月末时间戳的方法
2016/12/05 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
js最简单的拖拽效果实现代码
2010/09/24 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
简化版的vue-router实现思路详解
2018/10/19 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
利用Python如何生成随机密码
2016/04/20 Python
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
Python生成词云的实现代码
2020/01/14 Python
Python类继承和多态原理解析
2020/02/05 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
微观物理专业自荐信
2014/01/26 职场文书
2015年学生会部门工作总结
2015/04/21 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书