专栏名称: HULK一线技术杂谈
HULK是360的私有云平台,丰富的一线实战经验,为你带来最有料的技术分享
目录
相关文章推荐
Linux就该这么学  ·  4 名程序员被捕、维护赌博网站月薪最高 ... ·  昨天  
Linux就该这么学  ·  输入中文秒变运维代码的神器,竟还接入满血 ... ·  2 天前  
CDA数据分析师  ·  2025年AI智能体元年,数据分析师会被替代吗? ·  3 天前  
CDA数据分析师  ·  CDA数据人才能力模型与认证体系简介​ ·  3 天前  
Linux就该这么学  ·  反内卷!多家公司禁用 PPT ·  3 天前  
51好读  ›  专栏  ›  HULK一线技术杂谈

代码这样写更优雅(Python版)

HULK一线技术杂谈  · 公众号  ·  · 2017-07-20 19:32

正文

题图:unsplash.com

Python 这门语言最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净、整洁、一目了然。但有时候我们写代码,特别是 Python 初学者,往往还是按照其它语言的思维习惯来写,那样的写法不仅运行速度慢,代码读起来也费尽,给人一种拖泥带水的感觉,过段时间连自己也读不懂。

《计算机程序的构造和解释》的作者哈尔·阿伯尔森曾这样说:“Programs must be written for people to read, and only incidentally for machines to execute.”

要写出 Pythonic(优雅的、地道的、整洁的)代码,还要平时多观察那些大牛代码,Github 上有很多非常优秀的源代码值得阅读,比如:requests、flask、tornado,笔者列举一些常见的 Pythonic 写法,希望能给你带来一点启迪。

1、变量交换

大部分编程语言中交换两个变量的值时,不得不引入一个临时变量:

>>> a = 1
>>> b = 2
>>> tmp = a
>>> a = b
>>> b = tmp

pythonic

>>> a, b = b, a

2、循环遍历区间元素

for i in [0, 1, 2, 3, 4, 5]:
   print i2
# 或者
for i in range(6):
   print i2

pythonic

for i in xrange(6):
   print i2

xrange 返回的是生成器对象,生成器比列表更加节省内存,不过需要注意的是 xrange 是 python2 中的写法,python3 只有 range 方法,特点和 xrange 是一样的。

3、带有索引位置的集合遍历

遍历集合时如果需要使用到集合的索引位置时,直接对集合迭代是没有索引信息的,普通的方式使用:

colors = ['red', 'green', 'blue', 'yellow']

for i in range(len(colors)):
   print i, '--->', colors[i]

pythonic

for i, color in enumerate(colors):
   print i, '--->', color

4、字符串连接

字符串连接时,普通的方式可以用 + 操作

names = ['raymond', 'rachel', 'matthew', 'roger',
        'betty', 'melissa', 'judith', 'charlie']

s = names[0]
for name in names[1:]:
   s += ', ' + name
print s

pythonic

print ', '.join(names)

join 是一种更加高效的字符串连接方式,使用 + 操作时,每执行一次 + 操作就会导致在内存中生成一个新的字符串对象,遍历8次有8个字符串生成,造成无谓的内存浪费。而用 join 方法整个过程只会产生一个字符串对象。

5、打开/关闭文件

执行文件操作时,最后一定不能忘记的操作是关闭文件,即使报错了也要 close。普通的方式是在 finnally 块中显示的调用 close 方法。

f = open('data.txt')
try:
   data = f.read()
finally:
   f.close()

pythonic

with open('data.txt') as f:
   data = f.read()

使用 with 语句,系统会在执行完文件操作后自动关闭文件对象。

6、列表推导式

能够用一行代码简明扼要地解决问题时,绝不要用两行,比如

result = []
for i in range(10):
   s = i  2
   result.append(s)

pythonic

[i2 for






请到「今天看啥」查看全文


推荐文章
CDA数据分析师  ·  CDA数据人才能力模型与认证体系简介​
3 天前
Linux就该这么学  ·  反内卷!多家公司禁用 PPT
3 天前
不正常人类研究中心  ·  整个日本的智商都被这家人拉低了
8 年前
理想聚焦  ·  我很累,但无路可退。。。
8 年前
智利中文网  ·  智利自动取款机抢劫案件有明显的下降
7 年前