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 11 Python
python实现比较两段文本不同之处的方法
May 30 Python
详解Python中for循环是如何工作的
Jun 30 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
python3库numpy数组属性的查看方法
Apr 17 Python
Django web框架使用url path name详解
Apr 29 Python
Python3内置模块之json编解码方法小结【推荐】
Dec 09 Python
python+selenium实现自动化百度搜索关键词
Jun 03 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
Jun 04 Python
pycharm全局搜索的具体步骤
Jul 28 Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 20 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 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/07/17 PHP
浅析php面向对象public private protected 访问修饰符
2013/06/30 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
使用ionic切换页面卡顿的解决方法
2016/12/16 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
详解vue项目优化之按需加载组件-使用webpack require.ensure
2017/06/13 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
JavaScript引用类型Array实例分析
2018/07/24 Javascript
Python 返回汉字的汉语拼音
2009/02/27 Python
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
Python简易版停车管理系统
2019/08/12 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
python导入库的具体方法
2020/06/18 Python
中英双版中文教师求职信
2013/10/27 职场文书
资料员岗位职责
2013/11/17 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
Python中使用subprocess库创建附加进程
2021/05/11 Python
python 算法题——快乐数的多种解法
2021/05/27 Python
浅谈怎么给Python添加类型标注
2021/06/08 Python