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 相关文章推荐
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
Python的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
Python 3中的yield from语法详解
Jan 18 Python
Pycharm学习教程(4) Python解释器的相关配置
May 03 Python
Python文件的读写和异常代码示例
Oct 31 Python
python 处理string到hex脚本的方法
Oct 26 Python
用Python绘制漫步图实例讲解
Feb 26 Python
Python decimal模块使用方法详解
Jun 08 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
python实现socket简单通信的示例代码
Apr 13 Python
python读取mnist数据集方法案例详解
Sep 04 Python
pytorch实现加载保存查看checkpoint文件
Jul 15 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实现memcache缓存示例讲解
2013/12/04 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
php 浮点数比较方法详解
2017/05/05 PHP
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
Mac 安装 nodejs方法(图文详细步骤)
2017/10/30 NodeJs
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
Python实现的Excel文件读写类
2015/07/30 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
python+tkinter实现学生管理系统
2019/08/20 Python
python区分不同数据类型的方法
2019/10/14 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
如何通过python检查文件是否被占用
2020/12/18 Python
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
家庭户外服装:Hawkshead
2017/11/02 全球购物
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
行政前台岗位职责
2013/12/04 职场文书
大学生的四年学习自我评价
2013/12/13 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
办公室岗位职责范本
2015/04/11 职场文书
三八节活动简报
2015/07/20 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
为什么node.js不适合大型项目
2021/04/28 Javascript
python 标准库原理与用法详解之os.path篇
2021/10/24 Python