优雅的 python

Feb 07 2020

python 代码简洁,入门门槛低,成为不少初学编程者的首选。那么恭喜,毕竟白纸一张,直接学习 pythonic 的写法更容易记忆。但像我这种平时办公经常使用 Java 的工程师来说,把 python 写成 Java 的方式,不仅效率低,而且代码冗余很难看,因此有必要总结一下我所知道的优雅的 python 代码

多个变量赋值

给 a, b, c, d 赋值

普通写法

1
2
3
4
>>> a=1
>>> b=2
>>> c=3
>>> d=4

优雅的写法

1
>>> a,b,c,d=6,7,8,9

注:这种赋值方法可以不是一个类型

1
>>> a,b,c,d=6,'7',8,'9'

交换变量值

交换 a 和 b 变量的值

普通写法

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

优雅的写法

1
>>> a, b = b, a

序列化解包(unpack)

将一个列表中的值赋给变量

普通写法

1
2
3
4
>>> _list = ['刘能',50,'male']
>>> name = _list[0]
>>> age = _list[1]
>>> gender = _list[2]

优雅的写法

1
2
3
4
5
6
7
8
>>> n,a,g=_list
>>> n
'刘能'
>>> a
50
>>> g
'male'
>>>

类 Java 三目运算

普通写法

1
2
3
4
5
6
7
>>> x = None
>>> y = 1
>>> if y > 1:
... x = 0
... else:
... x = 1
...

优雅的写法:

1
2
>>> y = 1
>>> x = 0 if y > 1 else 1

拼接字符串

将列表中的字符串拼接起来

普通写法

1
2
3
4
_list = ['a','b','c','d','e']
_merge = ''
for x in _list:
_merge += x

优雅的写法

1
_merge = ''.join(_list)

添加分隔符的话

1
_merge = ','.join(_list)

多个条件的判断

“与”

普通写法

1
2
if exp1 and exp2 and exp3 and exp4:
...

优雅的写法:

1
if all([exp1,exp2,exp3,exp4])

“或”

优雅的写法:

1
if any([exp1,exp2,exp3,exp4])

遍历迭代器时同时访问索引

普通写法

1
2
3
_list = ['a', 'b', 'c', 'd', 'e']
for i in range(len(_list)):
print(_list[i])

优雅的写法

1
2
for index, value in enumerate(_list):
print('{0},{1}'.format(index, value))

非空的判断

判断字符串,列表,字典非空

普通写法

1
2
3
4
5
6
7
8
9
a = ''
b = []
c = {}

if a != '':
pass

if len(b) > 0:
pass

优雅的写法:

1
2
3
4
if a:
pass
if b:
pass

列表构造字典

普通写法

1
2
3
4
5
_keys = ['1', '2', '3']
_values = ['v1', 'v2', 'v3']
_dict = {}
for i in range(len(_keys)):
_dict[_keys[i]] = _values[i]

优雅的写法

1
_dict = dict(zip(_keys,_values))

写到这里,感觉 python 真的是太优雅了,如果用年龄来形容,就像一个 20 出头的妙龄少女,充满了青春与活力,让人忍不住想要亲近。哦对了,写到这里,感觉 Java 写起来就像 50 岁的大妈。对不起,大妈再老,也是吃饭的本钱