59个Python使用技巧,从此你的Python与众不同(二)


20. 隐藏特性 5,带关键字的格式化

>>> print "Hello %(name)s !" % {'name': 'James'}Hello James !>>> print "I am years %(age)i years old" % {'age': 18}I am years 18 years old

更新些的格式化:

>>> print "Hello {name} !".format(name="James")Hello James !


21. 隐藏特性 6,切片操作的步长参数

可以用步长 -1 来反转链表:

>>> a = [1, 2, 3, 4, 5]>>> a[::2][1, 3, 5]>>> a[::-1][5, 4, 3, 2, 1]>>>


22. 隐藏特性 7,嵌套列表推导式

[(i, j) for i in range(3) for j in range(i)][(1, 0), (2, 0), (2, 1)]

列表推导构造permutation:
可以用 itertools.permutations 来实现。

In[47]: a = 'abcd'
In[48]: [i+j+k for i in a for j in a.replace(i,'') for k in a.replace(i,'').replace(j,'')]Out[48]: ['abc','abd','acb','acd','adb','adc','bac','bad','bca','bcd','bda','bdc','cab','cad','cba','cbd','cda','cdb','dab','dac','dba','dbc','dca','dcb']


23. 隐藏特性 8,print 重定向输出到文件

注意打开的模式: “w+” 而不能 “w” , 当然 “a” 是可以的

>>> print >> open("somefile", "w+"), "Hello World"


24. 隐藏特性 9, Python3中的元组unpack

>>> a, b, *rest = range(10)>>> a0>>> b1>>> rest[2, 3, 4, 5, 6, 7, 8, 9]>>>
>>> first, second, *rest, last = range(10)>>> first0>>> second1>>> last9>>> rest[2, 3, 4, 5, 6, 7, 8]

25. 隐藏特性 10,pow的第三个参数

其实第三个参数是来求模的: pow(x, y, z) == (x ** y) % z,注意,内置的 pow 和 math.pow 并不是一个函数,后者只接受2个参数。

>>> pow(4, 2, 2)0>>> pow(4, 2, 3)1

26. 隐藏特性 11,enumerate还有第二个参数¶

enumerate 很赞,可以给我们索引和序列值的对, 但是它还有第二个参数,这个参数用来: 指明索引的起始值。

>>> lst = ["a", "b", "c"]>>> list(enumerate(lst, 1))[(1, 'a'), (2, 'b'), (3, 'c')]


27. 隐藏特性 12,显式的声明一个集合

在Python 2.7 之后可以这么声明一个集合。

>>> {1,2,3}set([1, 2, 3])

28. 隐藏特性 13,用切片来删除序列的某一段

>>> a = [1, 2, 3, 4, 5, 6, 7]>>> a[1:4] = []>>> a[1, 5, 6, 7]

当然用 del a[1:4] 也是可以的,去除偶数项(偶数索引的):

>>> a = [0, 1, 2, 3, 4, 5, 6, 7]>>> del a[::2]>>> a[1, 3, 5, 7]


29. 隐藏特性 14,isinstance可以接收一个元组

这个真的鲜为人知, 我们可以用 isinstance(x, (float, int)) 来判断 x 是不是数,也就是那个元组里面是 或 的关系,只要是其中一个的实例就返回 True。

>>> isinstance(1, (float, int))True>>> isinstance(1.3, (float, int))True>>> isinstance("1.3", (float, int))False


30. 让关键代码依赖于外部包

虽然Python让许多编程任务变得容易,但它可能并不总能为紧急的任务提供最佳性能。你可以为紧急的任务使用C、C++或机器语言编写的外部包,这样可以提高应用程序的性能。这些包都是不能跨平台的,这意味着你需要根据你正在使用的平台,寻找合适的包。

简而言之,这个方案放弃了一些应用程序的可移植性,以换取只有在特定主机上直接编程才能获得的程序性能。这里有一些你应该考虑加入到你的“性能兵工厂”的包:

  • Cython

  • PyInlne

  • PyPy

  • Pyrex

这些包以不同的方式提高性能。例如,Pyrex能够扩展Python所能做的事情,例如使用C的数据类型来让内存任务更加有效或直接。PyInIne让你在Python应用程序中直接使用C代码。程序中的内联代码单独编译,但它在利用C语言所能提供的效率的同时,也让所有的代码都在同一个地方。

End.

作者:地球的外星人君

来源:知乎

零基础学 Python,来这里

 只需7天时间,跨进Python编程大门,已有3800+加入

【基础】0基础入门python,24小时有人快速解答问题;
【提高】40多个项目实战,老手可以从真实场景中学习python;
【直播】不定期直播项目案例讲解,手把手教你如何分析项目;
【分享】优质python学习资料分享,让你在最短时间获得有价值的学习资源;圈友优质资料或学习分享,会不时给予赞赏支持,希望每个优质圈友既能赚回加入费用,也能快速成长,并享受分享与帮助他人的乐趣。
【人脉】收获一群志同道合的朋友,并且都是python从业者
【价格】本着布道思想,只需 69元 加入一个能保证学习效果的良心圈子。

【赠予】价值109元 0基础入门在线课程,免费送给圈友们,供巩固和系统化复习

发布了88 篇原创文章 · 获赞 18 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/lovenankai/article/details/104104012
今日推荐