15个Pythonic的代码示例(值得收藏)

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代码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 几种实用的pythonic语法实例代码

    前言 python 是一门简单而优雅的语言,可能是过于简单了,不用花太多时间学习就能使用,其实 python 里面还有一些很好的特性,能大大简化你代码的逻辑,提高代码的可读性. 所谓Pythonic,就是极具Python特色的Python代码(明显区别于其它语言的写法的代码) 关于 pythonic,你可以在终端打开 python,然后输入 import this,看看输出什么,这就是 Tim Peters 的 <The Zen of Python>,这首充满诗意的诗篇里概况了 python

  • 给大家整理了19个pythonic的编程习惯(小结)

    Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净.整洁.一目了然. 要写出 Pythonic(优雅的.地道的.整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀的源代码值得阅读,比如:requests.flask.tornado,下面列举一些常见的Pythonic写法. 0. 程序必须先让人读懂,然后才能让计算机执行. "Programs must be written for people to read, and only incidentally

  • Python中enumerate()函数编写更Pythonic的循环

    enumerate函数 enumerate是一个Python内置函数,一个功能强大的内置函数.其实功能强大不足以形容它, 但是很难用一个词来形容它的用途. 让我们来看看一个使用enumerate进行循环的例子 names = ['李四', '张三', '王二'] for index, name in enumerate(names): print(f'{index}: {value}') 下面是这个循环的结果 0: 李四 1: 张三 2: 王二 这通常是一个很有用的方式去循环,但很多初学者甚至中

  • 让你的python代码更加pythonic(简练、明确、优雅)

    何为pythonic? pythonic如果翻译成中文的话就是很python.很+名词结构的用法在中国不少,比如:很娘,很国足,很CCTV等等. 我的理解为,很+名词表达了一种特殊和强调的意味.所以很python可以理解为:只有python能做到的,区别于其他语言的写法,其实就是python的惯用和特有写法. 置换两个变量的值. 很python的写法: 复制代码 代码如下: a,b = b,a 不python的写法: 复制代码 代码如下: temp = a a = b b = temp 上面的例

  • Python中那些 Pythonic的写法详解

    前言 Martin(Bob大叔)曾在<代码整洁之道>一书打趣地说:当你的代码在做 Code Review 时,审查者要是愤怒地吼道: "What the fuck is this shit?" "Dude, What the fuck!" 等言辞激烈的词语时,那说明你写的代码是 Bad Code,如果审查者只是漫不经心的吐出几个 "What the fuck?", 那说明你写的是 Good Code.衡量代码质量的唯一标准就是每分钟骂

  • Pythonic版二分查找实现过程原理解析

    前提:升序数组,待查元素在数组中. 二分查找:就是一个递归函数c.待查元素a,当前数组中位数b,如果b=a则返回b的索引,b>a则在b左侧的子数组中调用函数c,否则在b右侧子数组中调用函数c. 第一次思考,按着上面的思路编程后的结果: def binary_search(index, a, value): if a[(len(a) - 1) // 2] == value: return index + (len(a) - 1) // 2 elif a[(len(a) - 1) // 2] <

  • 15个Pythonic的代码示例(值得收藏)

    Python由于语言的简洁性,让我们以人类思考的方式来写代码,新手更容易上手,老鸟更爱不释手. 要写出 Pythonic(优雅的.地道的.整洁的)代码,还要平时多观察那些大牛代码,Github 上有很多非常优秀的源代码值得阅读,比如:requests.flask.tornado,这里小明收集了一些常见的 Pythonic 写法,帮助你养成写优秀代码的习惯. 01. 变量交换 Bad tmp = a a = b b = tmp Pythonic a,b = b,a 02. 列表推导 Bad my_

  • 值得收藏的9个提高代码运行效率的小技巧(推荐)

    我们写程序的目的就是使它在任何情况下都可以稳定工作.一个运行的很快但是结果错误的程序并没有任何用处.在程序开发和优化的过程中,我们必须考虑代码使用的方式,以及影响它的关键因素.通常,我们必须在程序的简洁性与它的运行速度之间做出权衡.今天我们就来聊一聊如何优化程序的性能. 1. 减小程序计算量 1.1 示例代码 for (i = 0; i < n; i++) { int ni = n*i; for (j = 0; j < n; j++) a[ni + j] = b[j]; } 1.2 分析代码

  • 小程序点赞收藏功能的实现代码示例

    本文介绍了小程序点赞收藏功能的实现代码示例,分享给大家,具体如下: /收藏/ focusFavoriteTab: function (e) { var that = this; var isFocus = that.data.isFocus; console.log("isFocus", isFocus) var itemId = that.data.itemId; if (isFocus) { favoriteService.cancel(that, itemId).then((re

  • 15个值得收藏的JavaScript函数

    目录 1.逆转数字 2.获取数组中最大的n个数字 3.计算阶乘 4.判断当前运行环境是否为浏览器 5.判断当前运行环境是否为Node.js 6.获取url上的参数 7.rgb(x,x,x)颜色表达方式格式转换成对象格式 8.转义字符串以在 HTML 中使用 9.Unescapes 转义 HTML 字符 10.生成指定范围内的随机整数 11.将波浪号路径转换为绝对路径 12.获取不带任何参数或片段标识符的当前 URL 13.以字节为单位返回字符串的长度 14.随机获取数组中元素 15.检查字符串是

  • 15个短代码示例理解python丰富的编程思维

    目录 1.检查重复元素 2.变位词 3.检查内存使用情况 4.字节大小计算 5.重复打印字符串 N 次 6.首字母大写 7.分块 8.压缩 9.间隔数 10.链式比较 11.逗号分隔 12.计算元音字母数 13.首字母恢复小写 14.平面化 15.差异 1.检查重复元素 下面的方法可以检查给定列表中是否有重复的元素.它使用了 set() 属性,该属性将会从列表中删除重复的元素. def all_unique(lst): return len(lst) == len(set(lst)) x = [

  • 分享6 个值得收藏的 Python 代码

    目录 1.类有两个方法,一个是 new,一个是 init,有什么区别,哪个会先执行呢? 2.map 函数返回的对象 3.正则表达式中 compile 是否多此一举? 4.[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6] 5.一行代码将字符串 "->" 插入到 "abcdefg"中每个字符的中间 6.zip 函数 1.类有两个方法,一个是 new,一个是 init,有什么区别,哪个会先执行呢? class test(obj

  • Java编程线程间通信与信号量代码示例

    1.信号量Semaphore 先说说Semaphore,Semaphore可以控制某个资源可被同时访问的个数,通过acquire()获取一个许可,如果没有就等待,而release()释放一个许可.一般用于控制并发线程数,及线程间互斥.另外重入锁ReentrantLock也可以实现该功能,但实现上要复杂些. 功能就类似厕所有5个坑,假如有10个人要上厕所,那么同时只能有多少个人去上厕所呢?同时只能有5个人能够占用,当5个人中的任何一个人让开后,其中等待的另外5个人中又有一个人可以占用了.另外等待的

  • 值得收藏的10道python 面试题

    Q1:PEP8是什么?Python之禅(import this)是什么? 这题是考察你对编码规范的认识,无论是自己写代码还是在团队中写代码,了解并遵循代码规范是很基础的要求.企业中在提交代码后都会有对应的工具来对代码进行检查,比如 pep8.flake8.pylint 等,但是 PEP 8 是什么一定要了解. 即 Style Guide for Python Code(Python编码风格指南).如果面试时不知道什么是 PEP 8 ,那聊起来想必不会很愉快.速战速决的面试,如果不是你把面试官"秒

  • Python制作数据预测集成工具(值得收藏)

    大数据预测是大数据最核心的应用,是它将传统意义的预测拓展到"现测".大数据预测的优势体现在,它把一个非常困难的预测问题,转化为一个相对简单的描述问题,而这是传统小数据集根本无法企及的.从预测的角度看,大数据预测所得出的结果不仅仅是用于处理现实业务的简单.客观的结论,更是能用于帮助企业经营的决策. 在过去,人们的决策主要是依赖 20% 的结构化数据,而大数据预测则可以利用另外 80% 的非结构化数据来做决策.大数据预测具有更多的数据维度,更快的数据频度和更广的数据宽度.与小数据时代相比,

  • MySQL20个高性能架构设计原则(值得收藏)

    开源数据库架构设计原则 01. 技术选型 选择成熟的平台和技术,同时是最熟悉的,能做到极致的,用好不用坏,用熟不用生.目前业界的MySQL主流分支版本有Oracle官方版本的MySQL.Percona Server.MariaDB. 02. 高可用选择 高可用解决方案探讨的本质上是低宕机时间解决方案,可以理解成高可用的反面是不可用,绝大部分情况下数据库宕机才会导致数据库不可用.随着技术发展,开源数据库方面很多高可用组件(主从复制.半同步.MGR.MHA.Galera Cluster),对应场景,

随机推荐