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第三方库的安装方法总结
Jun 06 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
PyCharm在新窗口打开项目的方法
Jan 17 Python
Python不同目录间进行模块调用的实现方法
Jan 29 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
Oct 06 Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 Python
Python基于Tkinter编写crc校验工具
May 06 Python
django在开发中取消外键约束的实现
May 20 Python
基于python代码批量处理图片resize
Jun 04 Python
python读取图像矩阵文件并转换为向量实例
Jun 18 Python
Python猫眼电影最近上映的电影票房信息
Sep 18 Python
python数字图像处理实现图像的形变与缩放
Jun 28 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文件下载类
2006/12/06 PHP
PHP请求Socket接口测试实例
2016/08/12 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
2018/11/10 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
扩展easyui.datagrid,添加数据loading遮罩效果代码
2010/11/02 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
2014/03/20 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
移动端(微信等使用vConsole调试console的方法
2019/03/05 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
RC4文件加密的python实现方法
2015/06/30 Python
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
python编写弹球游戏的实现代码
2018/03/12 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
python脚本后台执行方式
2019/12/21 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
世界上最大的折扣香水店:FragranceNet.com
2016/10/26 全球购物
光声世纪笔试题目
2012/08/25 面试题
中国好声音广告词
2014/03/18 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
会计系毕业求职信
2014/08/07 职场文书
2014年采购员工作总结
2014/11/18 职场文书
消防演习通知
2015/04/25 职场文书
Html5生成验证码的示例代码
2021/05/10 Javascript