值得收藏!15个 Pythonic 的代码示例

值得收藏!15个 Pythonic 的代码示例Python 由于语言的简洁性 让我们以人类思考的方式来写代码 新手更容易上手 老鸟更爱不释手 要写出 Pythonic 优雅的 地道的 整洁的 代码 还要平时多观察那些大牛代码 Github 上有很多非常优秀的源代码值得阅读 比如 requests flask tornado 这里小明收集了一些常见的 Pythonic 写法 帮助你养成写优秀代码的习惯 01 变量交换 Badtmp aa bb tmpPythonica b b a02 列表推导 Badmy list

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' if <complex comparison> and <other complex comparison>: # do something

Pythonic

print 'one' print 'two' if x == 1: print 'one' cond1 = <complex comparison> cond2 = <other complex comparison> 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

my_very_big_string = """For a long time I used to go to bed early. Sometimes, \ when I had put out my candle, my eyes would close so quickly that I had not even \ time to say “I’m going to sleep.”""" from some.deep.module.inside.a.module import a_nice_function, another_nice_function, \ yet_another_nice_function

Pythonic

my_very_big_string = ( "For a long time I used to go to bed early. Sometimes, " "when I had put out my candle, my eyes would close so quickly " "that I had not even time to say “I’m going to sleep.”" ) from some.deep.module.inside.a.module import ( a_nice_function, another_nice_function, yet_another_nice_function)

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 < 60: print("young man")

Pythonic

if 18 < age < 60: 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

参考文档

  • http://docs.python-guide.org/en/latest/writing/style/
  • https://foofish.net/idiomatic_part2.html

文末福利

本人原创的 《PyCharm 中文指南》一书前段时间一经发布,就火爆了整个 Python 圈,发布仅一天的时间,下载量就突破了 1000 ,并且在当天就在 Github 上就收获了数百的 star,截至目前,下载量已经破万。

这本书一共将近 200 页内含大量的图解制作之精良,值得每个 Python 工程师 人手一份。

值得收藏!15个 Pythonic 的代码示例

为方便你下载,我将这本书上传到 百度网盘上了,你可以自行获取。

链接:https://pan.baidu.com/s/1-NzATHFtaTV1MQzek70iUQ

密码:mft3

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233972.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Winform 窗体美化(IrisSkin 换肤库)[通俗易懂]

    Winform 窗体美化(IrisSkin 换肤库)[通俗易懂]IrisSkin换肤库IrisSkin是为MicrosoftVisualStudiodotNET开发的最易用的界面增强dotNET(WinForm)组件包。能完全自动的为应用程序添加支持换肤功能。IrisSkin换肤库百度网盘下载提取码:1pb7皮肤编辑器下载打开下载解压后的文件路径:WinFormSkinDemo\WinFormSkin\WinFormSkin\bi…

    2022年5月28日
    29
  • mysql mycat读写分离_mycat读写分离原理

    mysql mycat读写分离_mycat读写分离原理MyCat的说明文档请参见主要使用到得几个配置文件有schema.xml、rule.xml、server.xmlMYCAT_HOME/conf/schema.xml中定义逻辑库,表、分片节点等内容.MYCAT_HOME/conf/rule.xml中定义分片规则.MYCAT_HOME/conf/server.xml中定义用户以及系统相关变量,如端口等.假设有如下几个数据库,arp库是a库的复制…

    2022年8月31日
    3
  • vue v-if 多条件_vue if show

    vue v-if 多条件_vue if showv-if在模板中,可以根据条件进行渲染。条件用到的是v-if、v-else-if以及v-else来组合实现的。示例代码如下:<divid="app"><p

    2022年7月30日
    7
  • mybatiscodehelperpro激活成功教程2.8.4_Mybatis框架

    mybatiscodehelperpro激活成功教程2.8.4_Mybatis框架#MyBatisCodeHelperPro2.9插件[2022最新有效]一、下载二、使用步骤1.引入库代码如下(示例):importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltimportseabornassnsimportwarningswarnings.filterwarnings(‘ignore’)importsslssl._create_default_https_contex

    2022年9月16日
    3
  • NTP时间服务器搭建「建议收藏」

    1.yuminstallntpntpdate安装NTP服务器2.NTP服务器配置:修改配置文件vi/etc/ntp.conf3./etc/init.d/ntpdrestart重启服务4.ntpq-p查看状态5.date查看当前时间6.客户机同步时间ntpdatepool.ntp.org(pool.ntp.org为服务机ip地址,pool.ntp.o…

    2022年4月7日
    38
  • 腾讯早期投资人_腾讯大涨

    腾讯早期投资人_腾讯大涨腾讯“炒基”帝国崛起?作者l大钊排版l勤燐电影《华尔街》里有句经典台词叫,“资本永不眠”。那资本如何不眠呢,无非就是“以钱生钱”,经济基础决定上层建筑,靠庞大的金融帝国撑起更大的商业梦想。近日,深圳证监局发布关于核准腾安基金销售(深圳)有限公司证券投资基金销售业务资格的批复。而腾讯集团相关负责人在接受《国际金融报》记者采访时表示,腾安基金销售(深圳)有限公司是腾讯全资控股的独立基金销售机构,以腾讯理财通平台为基础,开展基金销售业务。拿下第三方基金销售牌照后,腾讯在金融领域就已完成了第三

    2022年9月23日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号