>>> isinstance('abc',Iterable)
True
>>> isinstance([],Iterable)
True
>>> isinstance({},Iterable)
True
>>> isinstance(100,Iterable)
False
我们可以判断出是否为可迭代对象
【注】可以迭代的对象都可以用for循环打印
>>> isinstance((x for x in range(10)),Iterator)
True
>>> isinstance([],Iterator)
False
>>> isinstance({},Iterator)
False
>>> isinstance('asdf',Iterator)
False
所以我们可以发现,生成器就是一个迭代器
例1:
>>> isinstance (iter([]),Iterator)
True
>>> isinstance(iter({}),Iterator)
True
>>> isinstance(iter('asdf'),Iterator)
True
>>>
例2:
>>> a=[1,2,3,4,5]
>>> next(a)
Traceback (most recent call last):
File "", line 1, in
next(a)
TypeError: 'list' object is not an iterator
>>> b=iter(a)
>>> next(b)
1
>>> next(b)
2
>>> next(b)
3
>>>
总结:
凡是可作用于 for 循环的对象都是 Iterable 类型;
凡是可作用于 next() 函数的对象都是 Iterator 类型;
集合数据类型如:list、dict、str 等,都是 Iterable 但不是 Iterator ,不过可以用 iter() 函数来转换成新的迭代器。
闭包一个闭包就是你调用了一个函数 a ,这个函数 a 返回了一个函数 b 给你。这个返回的函数 b 就叫做闭包。
程序如下:
def test(number):
print ('=====1=====')
def test_in(number2):
print('======2======')
print(number+number2)
print('=====3======')
return test_in
ret = test(100)
print('-'*30)
ret(1)
ret(100)
ret(200)
运行结果:
在不调用闭包函数的时候,程序默认将闭包跳过,直接运行闭包外的函数。但是在执行闭包函数的时候,需要调用外部函数的变量,在函数执行完,再次需要执行的时候,外部函数不需要再次调用,直接执行,所以外部函数不会结束。
应用:
def test(a,b):
def test_in(x):
print(a*x+b)
return test_in
line1 = test(1,1)
line1(0)
line2 = test(10,4)
line2(0)
line1(0)