Python 高级技巧

Posted owenqing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 高级技巧相关的知识,希望对你有一定的参考价值。

(一)生成器

  通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。这个其实是惰性求值,数据不是全部一下子载入到内存中,而是一个一个来。

g = (i for i in range(10))
print(g)
# 把列表推导的圆括号换成方括号就变成了一个生成器
# <generator object <genexpr> at 0x000001AA11DD3D68>

我可以通过 next(g) 方法访问元素,在访问完所有的元素后会抛出一个异常。但是这种使用方法几乎不被推荐。正确的做法是用 yield 编写一个生成器函数,最后返回一个可迭代对象,然后用 for 循环来调用。

 1 def my_range(n):
 2     i = 0
 3     while i != n:
 4         i += 1
 5         yield i # 协程
 6 
 7 
 8 r = my_range(10) # 返回一个可迭代对象
 9 for i in r:
10     print(i)

yield 这种处理方式其实是协程,这个有点像系统终中断。协程,又称微线程,纤程。英文名Coroutine。协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用。子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用和子程序不同。协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。——廖雪峰

 

以上是关于Python 高级技巧的主要内容,如果未能解决你的问题,请参考以下文章

2020年最新Python开发的高级技巧,面试必学

python sortsorted高级排序技巧

掌握这9个单行代码技巧!你也能写出『高端』Python代码 ⛵

Atom编辑器入门到精通 Atom使用进阶

Android课程---Android Studio使用小技巧:提取方法代码片段

VS2015使用技巧 打开代码片段C#部分