Python由于语言的简洁性,让我们以人类思考的方式来写代码,新手更容易上手,老鸟更爱不释手。

要写出 Pythonic(优雅的、地道的、整洁的)代码,还要平时多观察那些大牛代码,Github 上有很多非常优秀的源代码值得阅读,比如:requests、flask、tornado,这里收集了一些常见的 Pythonic 写法,帮助你养成写优秀代码的习惯。

变量交换

  • Bad
tmp = a
a = b
b = tmp
  • Pythonic
a,b = b,a

列表推导

  • Bad
my_list = []
for i in range(10):
my_list.append(i*2)
  • Pythonic
my_list = [i*2 for i in range(10)]

单行表达式

  • 虽然列表推导式由于其简洁性及表达性,被广受推崇。
  • 但是有许多可以写成单行的表达式,并不是好的做法。
  • 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 

带索引遍历

  • Bad
for i in range(len(my_list)):
print(i, "-->", my_list[i])
  • Pythonic
for i,item in enumerate(my_list):
print(i, "-->",item)

序列解包

  • 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
1

字符串拼接

  • Bad
letters = ['s', 'p', 'a', 'm']
s=""
for let in letters:
s += let
  • Pythonic
letters = ['s', 'p', 'a', 'm']
word = ''.join(letters)

真假判断

  • 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!'

访问字典元素

  • 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']

操作列表

  • 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)

文件读取

  • 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

代码续行

  • 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)

显式代码

  • Bad
def make_complex(*args):
x, y = args
return dict(**locals())
  • Pythonic
def make_complex(x, y):
return {'x': x, 'y': y}

使用占位符

  • Pythonic
filename = 'foobar.txt'
basename, _, ext = filename.rpartition('.')

链式比较

  • Bad
if age > 18 and age < 60:
print("young man")
  • Pythonic
if 18 < age < 60:
print("young man")
  • 理解了链式比较操作,那么你应该知道为什么下面这行代码输出的结果是 False
>>> False == False == True
False

三目运算

这个保留意见。随使用习惯就好。

  • Bad
if a > 2:
b = 2
else:
b = 1
#b = 2
  • Pythonic
a = 3

b = 2 if a > 2 else 1
#b = 2

参考文档


关注、留言,我们一起学习,您的收藏是我持续更新的动力!

 

===============Talk is cheap, show me the code,bye-bye================

Pythonic【15个代码示例】的更多相关文章

  1. Java8-Function使用及Groovy闭包的代码示例

    导航 定位 概述 代码示例 Java-Function Groovy闭包 定位 本文适用于想要了解Java8 Function接口编程及闭包表达式的筒鞋. 概述 在实际开发中,常常遇到使用模板模式的场 ...

  2. Python实现各种排序算法的代码示例总结

    Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...

  3. [转]如何利用ndk-stack工具查看so库的调用堆栈【代码示例】?

    如何利用ndk-stack工具查看so库的调用堆栈[代码示例]? http://hi.baidu.com/subo4110/item/d00395b3bf63e4432bebe36d Step1:An ...

  4. Web前端设计:Html强制不换行<nobr>标签用法代码示例

    在网页排版布局中比如文章列表标题排版,无论多少文字均不希望换行显示,需要强制在一行显示完内容.这就可以nobr标签来实现.它起到的作用与word-break:keep-all 是一样的.nobr 是 ...

  5. Delphi之通过代码示例学习XML解析、StringReplace的用法(异常控制 good)

    *Delphi之通过代码示例学习XML解析.StringReplace的用法 这个程序可以用于解析任何合法的XML字符串. 首先是看一下程序的运行效果: 以解析这样一个XML的字符串为例: <? ...

  6. 中文代码示例之Angular入门教程尝试

    原址: https://zhuanlan.zhihu.com/p/30853705 原文: 中文代码示例教程之Angular尝试 为了检验中文命名在Angular中的支持程度, 把Angular官方入 ...

  7. RSA加密传输代码示例

    RSA加密传输代码示例 涉及敏感数据的传输,双方最好约定使用加密解密.那RSA非对称加密就大有作为了.服务端可以保留自己的私钥,发给客户端对应的公钥.这样就可以互相加解密了.php中rsa加解密实现: ...

  8. 2017-11-07 中文代码示例之Angular入门教程尝试

    "中文编程"知乎专栏原址 原文: 中文代码示例教程之Angular尝试 为了检验中文命名在Angular中的支持程度, 把Angular官方入门教程的示例代码中尽量使用了中文命名. ...

  9. 【Java基础】2、Java中普通代码块,构造代码块,静态代码块区别及代码示例

    Java中普通代码块,构造代码块,静态代码块区别及代码示例.Java中普通代码块,构造代码块,静态代码块区别及代码示例 执行顺序:静态代码块>静态方法(main方法)>构造代码块>构 ...

随机推荐

  1. 交换机&&路由器

    交换机 交换机就是一种信号转发设备,它帮助两个网络节点进行信号的传输 路由器 路由器路由器,要了解什么是路由器,首先我们要先明白何为'路由'? 路由:是指把数据从一个地方传送到另一个地方的行为和动作 ...

  2. leetcode刷题-75颜色分类

    题目 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝 ...

  3. python图片转码为base64

    import base64 def image_base64(): with open(image_path, 'rb', )as f: base64_data = base64.b64encode( ...

  4. Python数据类型方法整理

      前言:主要是对Python数据类型做一个整理,部分知识点源于<python3程序开发指南(第二版)>   一.Python的关键要素 1.1 要素1:数据类型  int类型 str类型 ...

  5. [LeetCode] 79. 单词搜索(DFS,回溯)

    题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单元格 ...

  6. 不定方程(Exgcd)

    #include<cstdio> using namespace std; int x,y; inline int abs(int a){return a>?a:-a;} int e ...

  7. JVM运行时数据区--堆

    一个进程对应一个jvm实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器.本地方法栈和虚拟机栈. 核心概述 1.一个jvm实例只存在一个堆内存,堆也是java内 ...

  8. ES6重度学习 demo实例

    let 与 const // 并非真正的常量 // const 的本质: const 定义的变量并非常量,并非不可变, // 它定义了一个常量引用一个值.使用 const 定义的对象或者数组,其实是可 ...

  9. x86-TSO : 适用于x86体系架构并发编程的内存模型

    Abstract : 如今大数据,云计算,分布式系统等对算力要求高的方向如火如荼.提升计算机算力的一个低成本方法是增加CPU核心,而不是提高单个硬件工作效率. 这就要求软件开发者们能准确,熟悉地运用高 ...

  10. Druid实现数据库连接用户密码加密

    使用ConfigFilter ConfigFilter的作用包括: 从配置文件中读取配置 从远程http文件中读取配置 为数据库密码提供加密功能 1 配置ConfigFilter 1.1 配置文件从本 ...