















lst[:]是传入lst的拷贝。改变它对原始lst没有任何影响。







*list一个*的元素在函数体内会被当成一个元组。
以下是对图中 Python 代码的详细解释:
代码总体功能
这段代码定义了一个生成器函数 getItem
,用于依次返回多个列表中的元素。然后通过循环遍历调用该生成器函数的结果,将元素逐个打印出来。
代码具体分析
- 注释
# 一个简单的生成器,依次返回多个列表中的元素
,这是一个单行注释,用于说明下面定义的getItem
函数的功能,即它是一个生成器函数,作用是依次获取多个列表里的元素。 - 生成器函数定义
def getItem(*lists):
-
- 函数定义语法 :
def
是 Python 中定义函数的关键字,getItem
是函数名,(*lists)
表示函数接受任意数量的位置参数,这些参数会被收集成一个元组,在函数内部可以像处理普通元组一样处理lists
。 - 函数功能:这个函数的目的是创建一个生成器,用于遍历多个列表中的元素。
- 函数定义语法 :
-
函数内部循环结构
for lst in lists:
for item in lst:
yield item- 外层循环:
for lst in lists:
,这里lists
是函数getItem
接收到的包含多个列表的元组,该循环用于逐个遍历这些列表,每次迭代lst
会取到lists
中的一个列表。 - 内层循环:
for item in lst:
,这个循环用于遍历当前lst
列表中的每个元素,item
会依次取到列表中的每个值。 yield
关键字:yield item
是生成器的关键所在。yield
会暂停函数的执行,并返回item
这个值。当生成器函数被调用并迭代时,每次遇到yield
,函数的状态会被保存,下一次迭代时会从暂停的地方继续执行,而不是从头开始。这使得生成器可以按需生成值,而不是一次性生成所有值并占用大量内存。
- 外层循环:
-
使用生成器遍历列表元素
for item in getItem([1,2], ['a','b']):
print item- 调用生成器函数:
getItem([1,2], ['a','b'])
调用了getItem
生成器函数,并传入了两个列表[1,2]
和['a','b']
作为参数。此时函数并不会立即执行完毕,而是返回一个生成器对象。 - 遍历生成器:
for item in...
循环开始迭代这个生成器对象。每次迭代时,生成器函数getItem
会从上次yield
暂停的地方继续执行,直到再次遇到yield
返回一个新的值,这个值会被赋给item
,然后print item
语句将其打印出来。最终依次打印出1
、2
、a
、b
。
- 调用生成器函数:
这段代码很好地展示了 Python 中生成器函数的定义和使用方式,利用生成器可以更高效地处理大量数据,避免一次性将所有数据加载到内存中。