Python(五)元组和生成器推导式

一、元组(不可变序列)

1、概念

(1)元组,一旦创建,没有任何方法可以修改元组中的元素,只能使用del命令删除整个元组。

(2)Python内部实现对元组做了大量优化,访问和处理速度比列表快。

(3)调用函数时使用元组传递参数可以防止在函数中修改元组,使代码更安全。

(4)元组可用作字典的键,而列表则永远都不能当做字典键使用。

2、操作

元组不可变指的是,其元素的值是不可变的。但是其元素如果为列表,那么列表可变,而对于元组来说该元素为一个列表这个是不变的,该列表的引用内存地址是不变的。

Python(五)元组和生成器推导式

二、生成器推导式

1、概念

(1)生成器推导式的结果是一个生成器对象,而不是列表,也不是元组。

(2)使用生成器对象的元素时,可以根据需要将其转化为列表或元组。

(3)可以使用__next__()或者内置函数访问生成器对象,但不管使用何种方法访问其元素,当所有元素访问结束以后,如果需要重新访问其中的元素,必须重新创建该生成器对象。即生成器的对象好比一份蛋糕,第一个人吃完了就没了,必须重新制作另外一个蛋糕。

(4)生成器对象创建与列表推导式不同的地方就是,生成器推导式是用圆括号创建

2、操作

(1)__next__()和内置函数访问生成器对象

Python(五)元组和生成器推导式

(2)生成器在菲波那切数列的应用

新知识:a、包含yield语句的函数可以用来创建可迭代的生成器对象。

b、生成器对象具有惰性求值的特点,只在需要时返回元素,比列表推导式具有更高的效率,尤其适合大量数据的遍历。

什么意思呢?惰性求值,也就是延迟求值,表达式不会在它被绑定到变量之后就立即求值,而是等用到时再求值。因为在创建一个很大的生成器对象时,对内存的开销非常大,太大时python会直接报错,所以只在需要的时候才会返回元素。

Python(五)元组和生成器推导式