首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

15个Pythonic的代码示例

第一时间,获取最新Python干货!

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

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

01. 变量交换

Bad

tmp?=?a

a?=?b

b?=?tmp

Pythonic

a,b?=?b,a

02. 列表推导

Bad

my_list?=?[]

for?i?in?range(10):

my_list.append(i*2)

Pythonic

my_list?=?[i*2?for?i?in?range(10)]

03. 单行表达式

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

Bad

print?'one';?print?'two'

if?x?==?1:?print?'one'

ifand:

#?do?something

Pythonic

print?'one'

print?'two'

if?x?==?1:

print?'one'

cond1?=

cond2?=

if?cond1?and?cond2:

#?do?something

04. 带索引遍历

Bad

for?i?in?range(len(my_list)):

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

Pythonic

for?i,item?in?enumerate(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=""

for?let?in?letters:

s?+=?let

Pythonic

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

word?=?''.join(letters)

07. 真假判断

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

08. 访问字典元素

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

09. 操作列表

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)

10. 文件读取

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

11. 代码续行

Bad

Pythonic

12. 显式代码

Bad

def?make_complex(*args):

x,?y?=?args

return?dict(**locals())

Pythonic

def?make_complex(x,?y):

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

13. 使用占位符

Pythonic

filename?=?'foobar.txt'

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

14. 链式比较

Bad

if?age?>?18?and?age

print("young?man")

Pythonic

if?18

print("young?man")

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

>>>?False?==?False?==?True

False

15. 三目运算

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

Bad

if?a?>?2:

b?=?2

else:

b?=?1

#b?=?2

Pythonic

a?=?3

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

#b?=?2

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180717G1LAQY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com