# 优雅你的Python代码的15个tips

Python 环境下，在开始编码之前，输入 `importthis`，可以看到 Python 为我们准备的彩蛋——

```The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Special cases aren't special enough to break the rules.
......```

```优美胜于丑陋

……

#### 1、为多个变量赋值

```### NP:
a = 2
b = 5
c = 12

### P:
a,b,c = 2,5,12```

#### 2、变量值互换

```a = 50
b = 25

### NP:
temp = a
a = b
b = temp

### P:
a,b = b,a```

#### 3、链式比较

```a = 50
b = 25

### NP:
0<= b and b<=a and a<100

### P:
0 <= b <= a < 100```

#### 4、any/all函数

`any``all``Python`的内置函数。对于 `any`函数，可迭代参数的任何一个元素为真就返回 `True`，否则返回 `False`。对于 `all`函数，如果可迭代参数的所有元素为真（或迭代器为空），返回 `True`，否则返回 `False`

```### NP:
xyz = [4641951.185   1393053.923   4133281.067]
for v in xyz:
if 0.0==v:
return False
return True

### P:
return all(xyz)```

#### 5、用in代替or简化判断

```### NP:
if 'green'==s0 or 'red'==s0 or 'blue'==s0:
return True
else:
return False

### P:
return s0 in ('green', 'red', 'blue')```

#### 6、if/else 三目运算

```### NP:
if age > 18:
else:
ss = 'child'

### P:
ss = 'adult' if age > 18 else 'child'```

#### 7、字符串列表的连接

```lst_str = ["Python", "is", "a", "good", "language"]

### NP1:
ss = ''
for s0 in lst_str:
ss += s0 + ' '

### NP2:
ss = '%s %s %s %s %s'%(lst_str[0], lst_str[1], lst_str[2], lst_str[3], lst_str[4])

### P:
ss = ' '.join(lst_str)```

#### 8、匹配字符串开头/结尾

```fname1 = 'python.jpg'
fname2 = 'folwer.bmp'

### P:
fname1.startswith('python')           #True
fname2.endswith('.jpg')                #False
fname2.endswith(('.jpg', '.bmp'))     #True
fname3.endswith(('.jpg', '.bmp'))      #False```

#### 9、列表推导式

```lst0 = [11, 22, 24, 87, 70]

### NP:
lst1 = []
for v in lst0:
if v>30:
lst1.append(v)

### P:
lst1 = [ v for v in lst0 if v>30 ]```

`picfiles = [nm for nm in os.listdir(mydir) if nm.endswith( ('.jpg', '.bmp', '.tiff', '.gif', '.png') ) ]`

#### 10、使用zip同步处理多个列表

```income = [201, 198, 195, 210, 199]
cost_rent = [80, 83, 77, 81, 80]
cost_food = [47, 64, 53, 51, 79]
balance = []

### NP:
nlen = len(income)
for i in range(nlen):
balance.append(income[i] - cost_rent[i] - cost_food[i])

### P:
for i0, cr, cf in zip(income, cost_rent, cost_food):
balance.append(i0 - cr - cf)```

`zip(a,b)` 会生成一个可返回元组 `(x,y)` 的迭代器，其中x来自a，y来自b。 一旦其中某个序列到底结尾，迭代宣告结束。 因此迭代长度跟参数中最短序列长度一致。

#### 11、列表去重

```### NP:
lst_new = []

for v in lst_old:
if not v in lst_new:
lst_new.append(v)

### P:
lst_new = list(set(lst_old))```

#### 12、文件打开与关闭/上下文管理

```### NP:
fp = open('result.txt', 'w')
try:
fp.write('just for fun!')
except IOError:
print('something error')
finally:
fp.close()

### P:
with open('result.txt', 'w') as fp:
fp.write('just for fun!')```

with 关键字实现了上下文管理器，是一种更简洁也更安全的操作方法。上例中当离开 with 代码块的时候，系统会自动调用 fp.close() 方法关闭文件， 哪怕中间遇到异常，close 方法也会被调用。

#### 13、Enumerate

```array = ['Stone', 'Tom', 'Jobs', 'Jack']

### NP:
narr = len(array)
for i in range(narr)：
print (i, array[i])

### P:
for i, a0 in enumerate(array):
print (i, a0)

#0 Stone
#1 Tom
#2 Jobs
#3 Jack```

#### 14、对齐字符串

```ss = 'Summary'

### NP:
print ('%s%s%s', '-'*20, ss, '-'*20)

### P:
print (ss.center(50,'-'))
#--------------------Summary--------------------```

#### 15、解包

```lst = ['jack', 18, 'Python', 'Good']

### NP:
name = lst[0]
age = lst[1]
lang = lst[2]
score = lst[3]

### P:
name, age, lang, score = lst```

```### P:

0 条评论

• ### Ptython命名自喜剧团体，宅男程序员三个月写出的编程语言是如何改变世界的？

1989年，荷兰的一位叫Guido Van Rossum的宅男程序员觉得其他语言都不好用，于是花三个月创造了一种新的编程语言。

• ### Python 官网宣布，正式发布 Python 3.8.0！

那么，这次新发布的 Python 3.8.0 有哪些重要的改进呢？以下是是 Python 3.8 相比 3.7 的新增特性。

• ### 27 个问题，告诉你Python为什么这么设计？

本文选自 Python 的官方文档。它列举了 27 个设计及历史的问题，其中有些问题我曾经分享过，例如为什么使用显式的 self、浮点数的问题、len(x) 而...

• ### 我用 Python 爬取了全国 4500 个热门景点，告诉你国庆哪里去不得？

金秋九月，丹桂飘香，在这秋高气爽，阳光灿烂的收获季节里，我们送走了一个个暑假余额耗尽哭着走向校园的孩子们，又即将迎来一年一度伟大祖国母亲的生日趴体(无心上班，迫...

• ### Python爬取4500个景点：用echarts热力图分析国庆哪里最堵？

于是我萌生了通过旅游网站的景点销量来判断近期各景点流量情况的想法(这个想法很危险啊)。

• ### [接口测试 - 基础篇] 04 无法绕过的json解析

概述 我们先看一下什么是json。 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交...

• ### 假期苦短，我用Python！这有个自动回复拜年信息的小程序

大年三十到年初一，有没有也被拜年短信（大部分是群发）搞得很焦虑？不回复似乎显得很没有礼貌，一一回复又累心劳神。

• ### 如何调试SAP CRM产品主数据应用后台ABAP端抛出的错误消息

版权声明：本文为博主汪子熙原创文章，未经博主允许不得转载。 https://jerry.bl...