python_列表_迭代_函数_闭包

列表生成器:
1、生成一个普通列表:
ls = [x for x in range(101)]
为什么学习列表生成器:降低内存kaixiao
两种实现:
1:[] ==> () generator
next方法的时候会返回下一个值
next()
2、将函数转换为列表生成器
yield generator
send()使用
3、协程 实现一个多任务

在编程中,我们有时候会需要生成一个列表,但是该列表可能占用大量内存,此时列表直接加载到内存中就不可取了,python提供了一个列表生成器。
列表生成器是一段生成对应列表的算法:
1、将我们之前的[]换成() []==>()
next()方法来获取下一个列表的值
for来迭代生成器
2、将函数转换为列表生成器
斐波那契数列:从第三个数开始,前两个数之和等于第三个数(1,2,3,5,8)
def fob(max):
temp = 0
a = 1
b = 0
while b <= max:
print(a)
如果列表是由一个函数得到,可以将这个函数转换为一个列表生成器,使用关键字yield,当函数中出现yield关键字,此时该函数的返回值自动的转换为一个列表生成器。

迭代器:
1、可以迭代的对象(collections.Iterator):
列表
元组
集合
字典
字符串
如何判断一个对象是可以迭代的?
通过collections模块的iterable类型来判断。
from collections import Iterable
isinstance('abc',Iterable) #str是否可迭代
Ture

    isinstance([1,2,3],Iterable)  #list是否可迭代
    Ture

    isinstance(123,Interable)   #整数是否可迭代
    False

2、迭代器(collections.Iterator):
    能够被next调用,返回下一个值的对象
    可以被next()函数调用并不断返回下一个值的对象成为迭代器
    
    总结:
        1、生成器就是迭代器
        2、迭代器不一定是生成器
        3、可迭代的对象不一定是迭代器
        4、迭代器肯定可以被迭代
 3、将可迭代的对象转换为迭代器
    迭代器 = iter(可迭代的对象)

什么是函数?
为了完成某一功能的代码集合。
*args 函数的可变参数,以元组的形式传递参数
*kwargs命名参数
def add(x,y,
args):
return x + y
递归:函数自身调用自身就会形成递归
函数调用
sum = add(5,8)

lambda表达式,也就是python匿名函数,简化了代码操作。
增加了代码难度,降低了可读性,增加了代码维护的成本。
cb(lambda msg:print("接受到一个信息,信息是==>"msg))

闭包:闭包就是能够读取其他函数内部变量的函数
闭包是弱数据类型语言所特有的特性
闭包的特点:函数嵌套函数
闭包的作用:
1、局部变量全局化,防止全局变量被污染 js

面试题:
请简略说明xrange和range的区别。
range:返回等差数列。构建等差数列,起点是start,终点是stop,但不包含stop,公差是step。start和step是可选项,没给出start时,从零开始;没给出step时,默认公差是1.
xrange:xrange与range类似,只是返回的是一个"xrange object"对象,而非数组list。要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟出一块很大的内存空间,这两个基本上都是在循环的时候使用。
区别:range可以返回一个可以用于所有目的的普通列表对象,而xrange将返回一个特殊目的的对象,尤其适用于迭代操作,但是xrange并不返回一个迭代器,如果需要这样一个迭代器,可以调用iter(xrange(x))。xrange返回的特殊目的对象比range返回的列表对象消耗较少的内存(范围比较大的时候)。但是对特殊目的对象指向循环操作的开销略微高于对列表执行循环的开销。

你可能感兴趣的:(python_列表_迭代_函数_闭包)