迭代器
迭代器是python中访问集合中元素的一种方法,它记录的是可遍历对象的位置,从可遍历对象第一个位置开始,直至对象的全部元素取出。注意迭代器只能前进,不能后退,直至最后弹出’StopIteration’的异常。迭代器常用的两种方法是iter()和next()。
可迭代对象创建迭代器
字符串、列表、元组等可迭代对象都可以创建迭代器。
一般用for语句访问迭代器的所有元素。
或者用while语句访问,但是要加上异常检测,并退出循环,否则容易造成死循环。
迭代器生成式。。。
列表生成式摇身一变,就转成迭代器了
迭代器的DIY式
同时也可以利用python中的模仿方法,自己定义一个迭代器
注意定义迭代器的时候,调用的是__iter__,而不是__init__,而且必须返回self。
生成器
在函数中加入yield,那么此时的函数就变成了一个生成器。yield相当于一个return返回一个值,并且记住这个返回的值,下次迭代时,代码从yield的下一条语句开始执行,直至再遇到yield为下次迭代准备,或者遇到return结束迭代。
可迭代对象、迭代器、生成器的区分
三者都可以使用for循环进行遍历,不同的是可迭代对象所占内存较大,而迭代器和生成器只是记住了生产序列的算法,运行一次,输出一个数值。
比如字符串是一个可迭代对象,例it = ‘abcd’,加上iter(it)就变为一个迭代器。
函数中的不定长参数
当输入的参数是一个星号或两个星号时,即*或**时,即认为是不定长参数,在函数中,当我们不确定输入参数的数量时会用到。不定长参数在调用函数时可传可不传。
输出对象是元组
当函数定义的参数前加一个星号时,在调入函数时,除了一般参数,其余的参数都会以元组的形式返回。
输出的对象是字典
当函数定义的参数前加两个星号时,在调入函数时,除了一般参数,其余的参数都会以字典的形式返回。所以注意了,传入的参数也必须指明对象,毕竟字典的元素是一键值对嘛。
匿名函数lambda
其实就是一个表达式
匿名函数,讲究的就是一个简洁,不再使用def语句这样标准的形式定义一个函数。lambda只是一个表达式,不是一个代码块,这也造成了匿名函数表达的局限。注意lambda传递的只是函数的名称,具体调用还得再次用括号,添加参数。