"""
11.迭代器
本节主要内容:
1.函数名的使用以及第一类对象
2.闭包
3.迭代器
"""
# 函数名的应用是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量
# 1.函数名的内存地址
def func():
print("你吃了吗?")
print(func) # 打印的是内存地址
# 2.函数名可以赋值给其他变量
def func():
print("你好,吃饭了吗")
print(func) # 打印的是函数func的地址位置
a = func # 将func函数名 赋值给变量a
a() # 使用()将函数func执行起来
# 3.函数名可以当做容器类的元素
def func1():
print("你好,吃饭了吗_1")
def func2():
print("你好,吃饭了吗_2")
def func3():
print("你好,吃饭了吗_3")
def func4():
print("你好,吃饭了吗_4")
lst = [func1, func2, func3]
for el in lst:
el()
# 4.函数名可以当做函数的参数
def func():
print("吃了吗?")
def func2(fu):
print("我是func2")
fu()
print("我是func2")
func2(func)
# 5.函数名可以作为返回值
def func_1():
print("这里是函数1")
def func_2():
print("这里是函数2")
print("这里是函数1")
return func_2
fu = func_1()
fu()
# 二 闭包 内层函数对外层函数变量的一个引用
def func():
name = "alex" # 1.常驻内存 2.防止其他程序改变这个变量
def inner():
print(name) # 在内层函数中调用外层函数的变量,叫闭包 可以让一个局部变量常驻内存
return inner
ret = func()
ret()
# 闭包的好处 url 统一资源定位符
# 迭代器 "__iterable__()" 的数据类型都是可迭代的数据类型iterable
# 来查看一个对象,数据类型中包含了哪些东西
lst = ['yuxin', 'niehaiyuan', 'niehaixing', ]
it = lst.__iter__() # 获取迭代器
print(it.__next__()) # yuxin
# 模拟for循环
it = lst.__iter__()
while True:
try:
name = it.__next__()
print(name)
except StopIteration:
break
# 迭代器的特点:
# 1.节省内存
# 2.惰性机制
# 3.不能反复,只能向下执行
"""
今日主要学习内容:
1.函数名的应用,第一类对象
函数名可以像变量一样进行使用
1.赋值
2.作为list元素
3.作为参数
4.作为返回值
2.闭包:
内部函数访问外部函数的局部变量.
好处:
1.安全
2.常驻内存,提高效率
3.迭代器
可迭代对象(iterable):内部包含 __iter__().
迭代器(iterator): 内部包含 __iter__() __next__() 迭代器也是可迭代对象
可迭代对象: str lsit tuple set dict
迭代器 f range
迭代器的特点:
1.省内存
2.惰性机制
3.只能往后走
"""