Python 编程高手与普通程序员的区别

阅读文本大概需要 7 分钟。

普通程序员和编程高手编写的代码,完全是两个世界。Python 由于语言的简洁性,让我们以人类思考的方式来写代码,新手更容易上手,老鸟更爱不释手。

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

01. 变量交换

Bad

tmp = a

a = b

b = tmp

Pythonic

a,b = b,a

02. 列表推导

Bad

my_list = []

foriinrange(10):

my_list.append(i*2)

Pythonic

my_list = [i*2foriinrange(10)]

03. 单行表达式

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

Bad

print'one';print'two'

ifx ==1:print'one'

ifand:

# do something

Pythonic

print'one'

print'two'

ifx ==1:

print'one'

cond1 =

cond2 =

ifcond1andcond2:

# do something

04. 带索引遍历

Bad

foriinrange(len(my_list)):

print(i,"-->", my_list[i])

Pythonic

fori,iteminenumerate(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=""

forletinletters:

s += let

Pythonic

letters = ['s','p','a','m']

word =''.join(letters)

07. 真假判断

Bad

ifattr ==True:

print'True!'

ifattr ==None:

print'attr is None!'

Pythonic

ifattr:

print'attr is truthy!'

ifnotattr:

print'attr is falsey!'

ifattrisNone:

print'attr is None!'

08. 访问字典元素

Bad

d = {'hello':'world'}

ifd.has_key('hello'):

printd['hello']# prints 'world'

else:

print'default_value'

Pythonic

d = {'hello':'world'}

printd.get('hello','default_value')# prints 'world'

printd.get('thingy','default_value')# prints 'default_value'

# Or:

if'hello'ind:

printd['hello']

09. 操作列表

Bad

a = [3,4,5]

b = []

foriina:

ifi >4:

b.append(i)

Pythonic

a = [3,4,5]

b = [iforiinaifi >4]

# Or:

b = filter(lambdax: x >4, a)

Bad

a = [3,4,5]

foriinrange(len(a)):

a[i] +=3

Pythonic

a = [3,4,5]

a = [i +3foriina]

# Or:

a = map(lambdai: i +3, a)

10. 文件读取

Bad

f = open('file.txt')

a = f.read()

printa

f.close()

Pythonic

withopen('file.txt')asf:

forlineinf:

printline

11. 代码续行

Bad

Pythonic

12. 显式代码

Bad

defmake_complex(*args):

x, y = args

returndict(**locals())

Pythonic

defmake_complex(x, y):

return{'x': x,'y': y}

13. 使用占位符

Pythonic

filename ='foobar.txt'

basename, _, ext = filename.rpartition('.')

14. 链式比较

Bad

ifage >18andage

print("young man")

Pythonic

if18

print("young man")

理解了链式比较操作,那么你应该知道为什么下面这行代码输出的结果是 False

>>>False==False==True

False

15. 三目运算

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

Bad

ifa >2:

b =2

else:

b =1

#b = 2

Pythonic

a =3

b =2ifa >2else1

#b = 2

人必有痴,而后有成

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180910A0F4QX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券