函数 之 闭包 迭代器 推到式

闭包:
def func():
name = "alex" # 常驻内存 防止其他程序改变这个变量
def inner():
print(name) # 在内层函数中调用了外层函数的变量,叫闭包, 可以让一个局部变量常驻内存
     print(inner.__closure__)    # 查看inner是否是闭包, 如果有东西就是闭包, 没东西就不是闭包
  return inner
func()()
ret = func()
ret() # 执行的是inner()

迭代器 与可迭代:
# for i in 123:
# print(i)#b报错 因为不是可迭代
# 可迭代对象: str, list, tuple, set, f, dict
# 所有的以上数据类型中都有一个函数__iter__(), 所有包含了__iter__()的数据类型都是可迭代的数据类型 Iterable
# dir()来查看一个对象,数据类型中包含了哪些东西
 
# 获取迭代器 .__iter__()

it=list.__iter__()
迭代器往外拿元素. __next__()
print(it.__next__())    # 皇阿玛
 
lst = ["皇阿玛", "皇额娘", "容嬷嬷", "紫薇"]
# 模拟for循环
it = lst.__iter__()
print(it)
while True:
try:
name = it.__next__()
print(name)
except StopIteration: # 拿完了
break
 
from collections import Iterable    # 可迭代的
from collections import Iterator # 迭代器
isinstence(对象, 类型) 判断xx对象是否是xxx类型的
# it = lst.__iter__()
# print(isinstance(it, Iterable)) # 判断是否是可迭代的 迭代器一定是可迭代的
# print(isinstance(it, Iterator)) # 迭代器里面一定有__next__(), __iter__()
# print("__iter__" in dir(lst))   # 确定是一个可迭代的
# print("__next__" in dir(lst)) # 确定是不是一个迭代器
 
f = open("01 今日内容大纲",mode="r", encoding="utf-8")
print(isinstance(f, Iterable))
print(isinstance(f, Iterator))

文件也是一个迭代器
 
 
 
 
 


 

猜你喜欢

转载自www.cnblogs.com/pxxandfdd/p/9965526.html