Python 中的闭包和迭代器

Python 中的闭包和迭代器

函数名的使用

1)函数的命名规范和变量名,函数名其实就是变量名

def main():
	pass
main=1
print(main)
#这时会输出1

2)函数名可以存在列表中进行遍历

def main1():
	print(1)
def main2():
	print(2)
lst=[main1,main2]
for fuc in lst:
	fuc()
#执行结果输出1,2

3)函数名可以作为参数传给另一个函数

def main1():
	print('main1')
def main2(fnc):
	fnc()
main2(fnc)
#运行结果:输出'main1'

4)函数可以做返回值

def main1():
	return main2
def main2():
	print('hello')
func=main1()
func()
#或者直接:main1()()
#运行结果:hello
闭包
  1. 闭包就是在内层函数中访问外层函数的变量
  2. 可以保护变量不受侵害
def outner():
	a=10#内部可以修改,但是对外部不开放,无法修改,且存放于常驻内存
	def inner():
		nonlocal a
		a=20
		print(a)
	return inner
fuc=outer()

3)查看一个函数是不是闭包

def func():
	a=10
	def inner():
		print(a)
	print(inner.__closure__)#如果打印None,不是闭包,如果不是None,就是闭包
func()
迭代器
  1. dir() 可以查看某类型的数据有哪些方法,所以带有__iter__,说明此对象可迭代,iterable(可迭代的)
  2. 可迭代对象可以使用__iter__(),获取到迭代器
  3. 几乎不占用内存,节省内存,惰性机制,必须
  4. 迭代器模拟for循环
lst=[1,2,3,4,5,6,7]
for i in lst:#底层使用的是迭代器
	print(i)
#try,except,可以在程序发生异常时继续执行
it=lst.__iter__()#获取迭代器
while 1:
	try:#尝试执行
		i=it.__next__()#获取下一个元素
		print(i)
	except StopIteration:#处理错误
		break
  1. 判断一个数据类型是否可迭代,可以通过dir来判断数据是否是可迭代的,以及数据类型是否是迭代器
from collections import Iterable #可迭代对象
from collections import Iterator#迭代器
print('__iter__' in dir(数据类型))#判断数据是否是可迭代的,True是,False不是
print(isinstance(对象,Iterable))#判断是否是迭代对象,True是,False不是
print(isinstance(对象,Iterator))#判断是否是迭代器,True是,False不是
发布了66 篇原创文章 · 获赞 7 · 访问量 2392

猜你喜欢

转载自blog.csdn.net/qq_45894553/article/details/104611429