黑马程序员技术交流社区

标题: 【上海校区】python入门(五)--特有属性 [打印本页]

作者: 梦缠绕的时候    时间: 2018-9-5 09:35
标题: 【上海校区】python入门(五)--特有属性

Python特性:

切片

通过冒号’:’来截取:

如list,tuple,string,实例


迭代判断是否可迭代

可以使用for …in …的方式来进行迭代,但是需要判断in后面的数据类型是否可迭代:


对dict进行迭代:

对key:


对value:


对list进行“索引-值”格式的迭代

Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:


列表生成式

利用range()函数:

但如果要生成[1x1,2x2, 3x3, ..., 10x10]怎么做?

法一,是循环:


法二,利用生成器,可以这么做:


如果循环里有条件判断,如要筛选出仅偶数的平方:


可以实现两层循环:



生成器

Python中一边循环一边计算的机制就是生成器,可以这样使用:


这样有点烦,可以循环遍历:


所以,我们创建了一个generator后,基本上永远不会调用next()方法,而是通过for循环来迭代它。

generator非常强大。如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数来实现。

比如,著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:

1, 1, 2, 3,5, 8, 13, 21, 34, ...

首先需要理解:


那么配波纳契数列可以这么写:


上面的函数改为generator,只需要把printb改为yieldb就可以了.


那么有什么区别呢,区别在于执行顺序不同。generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。(待深入理解)



作者: 不二晨    时间: 2018-9-6 11:15
奈斯




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2