5个让你代码更加Pythonic的技巧

Python Tricks

Author:CE Kan

Revise:louwill

来源:towardsdatascience

     无论你是首席的AI算法工程师还是一个一年级的本科生,Python一定会是你经常用到的一门编程语言。诞生于1991年的Python近年来迅速成为程序员和技术专家们最喜爱的语言之一。根据Stack Overflow高收入国家的问题浏览情况来看,Python已经快速成为最流行的编程语言。

     Python是一种具有相对简单语法的高级解释型语言,即使对于那些没有编程经验的人来说,Python也是完美的选择。流行的Python库已经很好地集成在一起,并用于生物信息学(biopython),数据科学(pandas),机器学习(keras/tensorflow)甚至天文学(astropy)等各个领域。在学习了C和Java作为我的第一门编程语言之后,我就可以在使用Google进行搜索的几周内自学Python。尽管执行速度比Java和其他语言慢得多,但Python具有完善的流程集成功能,实际上提高了生产率。

     本文就提供5个让你的Python代码更加快速、看起来更加Pythonic的代码技巧。

Trick 1:强大的一行代码

     你是否厌倦了在阅读代码的时候经常忽略了条件语句?Python强大的一行句式也许正是你需要的。我们来看以下例子:

if alpha > 7:    beta = 999elif alpha == 7:    beta = 99else:    beta = 0

     通过一行代码可以改造为:

beta = 999 if alpha > 7 else 99 if alpha == 7 else 0

     看起来有点难以置信,但是如果你稍微关注下你的代码,总能找到可以简化的地方。除了条件语句,for循环也是可以简化的。举例如下,我们要将一个列表中的数据进行double:

lst = [1, 3, 5]doubled = []for num in lst:    doubled.append(num*2)

     上述代码用一行表达式为:

doubled = [num * 2 for num in lst]

     当然,如果你把什么都写成一行大概率会出现输出混乱的情形。确保你没有在代码中过度使用单行代码,因为有人可能会认为广泛使用单行代码是Unpythonic的。

import pprint; pprint.pprint(zip(('Byte', 'KByte', 'MByte', 'GByte', 'TByte'), (1 << 10*i for i in xrange(5))))

Trick 2:快速的字符串操作

     字符串操作可能很棘手,但是Python的一些字符串处理技巧可以让这些问题变得很轻松。要翻转一个字符串,我们只需添加::-1作为列表索引:

a = "ilovepython"print(a[::-1])nohtypevoli

     同样的技巧也可以应用于整数列表。在Python中,字符串操作非常简单。例如,如果要使用以下预定义变量str1,str2和lst3输出句子:

str1 = "Totally"str2 = "Awesome"lst3 = ["Omg", "You", "Are"]

     只需使用.join()方法和算术运算符即可创建所需的句子:

print(' '.join(lst3))Omg You Areprint(' '.join(lst3)+' '+str1+' '+str2)Omg You Are Totally Awesome

     除了以上字符串操作技巧,同样也推荐大家使用正则表达式来进行快速的字符串处理操作。

Trick 3:嵌套的列表组合

     itertools也许是最令人喜欢的Python库之一。想象一下,你的代码中有十二个列表,经过一些操作,你最终得到了一个深层嵌套的列表。itertools正是为了解决这种语法混乱问题而存在的。

import itertoolsflatten = lambda x: list(itertools.chain.from_iterable(x))s = [['"', 'An', 'investment'], ['in'], ['knowledge'], ['pays'], ['the', 'best'], ['interest."', '--'], ['Benjamin'], ['Franklin']]print(' '.join(flatten(s)))" An investment in knowledge pays the best interest." -- Benjamin Franklin

     如上例所示,我们可以通过.join()和itertools库来组合一个嵌套列表和字符串。itertools是一个强大的工具,可以从可迭代的输入中返回元素的长度子序列。

Trick 4:简单的数据结构

     在Trick 1中我们体会到了一行代码的威力,现在我们也可以用一行代码来驱动Python中的数据结构。一行代码实现一个树结构:

def tree(): return defaultdict(tree)

     上面显示的代码仅定义了一棵树,该树是默认值为树的字典。Python还具有功能强大的库,例如Collections,它可以帮助你无需编写冗长的代码的情况下解决各种实际问题。

from collections import CountermyList = [1,1,2,3,4,5,3,2,3,4,2,1,2,3]print(Counter(myList))Counter({2: 4, 3: 4, 1: 3, 4: 2, 5: 1})

Trick 5:更加整洁的输出

     最后一个技巧是关于更加优雅的输出的。原来将带有字符串的数组打印为一个逗号分隔的字符串,我们不需要使用.join()和循环。

row = ["1", "bob", "developer", "python"]print(','.join(str(x) for x in row))1,bob,developer,python

     一行代码下的优雅输出:

print(*row, sep=',')1,bob,developer,python

     另一个巧妙的输出技巧是使用enumerate。enumerate是一个非常有用的Python的内置函数。如下例所示:

iterable = ['a','b','c']c = 0for item in iterable:    print c, item    c+= 1    0 a1 b2 c

     同样的事情我们可以用enmuerate来搞定:

for c, item in enumerate(iterable):    print(c, item)

    更多Python技巧可参考Python Tricks: The Book A Buffet of Awesome Python Features 一书:

参考资料:

https://towardsdatascience.com/five-python-tricks-you-need-to-learn-today-9dbe03c790ab

往期精彩:

深度学习100问-9:为什么EfficientNet号称是最好的分类网络?

深度学习100问-8:什么是Batch Normalization?

深度学习100问-7:dropout有哪些细节问题?

深度学习100问-6:有哪些经典的卷积类型?

深度学习100问-5:如何阅读一份深度学习项目代码?

深度学习100问-4:深度学习应遵循怎样的论文研读路线?

深度学习100问-3:深度学习应掌握哪些Linux开发技术?

深度学习100问-2:深度学习应掌握哪些Git开发技术?

深度学习100问-1:深度学习环境配置有哪些坑?

一个算法工程师的成长之路

机器学习实验室

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值