迭代是Python最强大的功能之一,是访问集合元素的一种方式。。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器:
import sys
list1 = [1,2,3,4]
it = iter(list1) #创建迭代器对象
while True:
try:
print(next(it))
except StopIteration: #StopIteration 当迭代到不会有元素的时候,中断
sys.exit()
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行 next()方法时从当前位置继续运行。
import sys
def fibonacci(n): #生成器函数-斐波那契数列
a,b,counter =0,1,0
while True:
if (counter >n):
return
yield a
a,b =b,a+b
counter +=1
f = fibonacci(10) #f 是一个迭代器,由生成器返回生成
while True:
try:
print (next(f),end=" ")
except StopIteration:
sys.exit()
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段
def change(mlist):
"修改传入的列表"
mlist.append([1,3,5])
print("函数内部:",mlist)
return
#调用change函数
mlist = [10,26,58]
change(mlist)
print("函数外取值:",mlist)
#传入函数的和在末尾添加新内容的对象用的是同一个引用。故输出结果如下:
#参数有必须参数,关键字参数,默认参数,不定长参数
def change(str):
"打印字符串"
print("str:",str)
return
def change2(name,age): #关键字参数
"打印字符串"
print("name:",name)
print("age:",age)
return
def change3(name,age=18): #默认参数
"打印字符串"
print("name:",name)
print("age:",age)
return
def changeInfo(args1,*vartuple): #不定长参数
print("args1:",args1)
for var in vartuple:
print("var:",var,end=" ")
return
#调用change函数
change(str = "Hello world!")
change2(age=30,name="jack")
change3(name="Tom")
change2(age=30,name="Herry")
changeInfo("Axp")
changeInfo(10,2,6,"Tom")
python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
lambda 只是一个表达式,函数体比 def 简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。