python(day8)

1、函数名的应用
	函数名是一个特殊的变量,与括号配合可以执行函数的变量
	a、函数名的内存地址:
		def func():
    		print("哈哈")
		print(func) 
		结果:<function func at 0x000002088C972EA0
	b、函数名可赋值
		def func():
   	        print("哈哈")
		a = func  # 函数当成变量赋值
		a()  # 函数调用func()
	c、函数名做容器类元素
		def func1():
    		print("哈哈")
		def func2():
	        print("哈哈")
		def func3():
	        print("哈哈")
		li = [func1,func2,func3]
		for i in li:
   	        i()
    d、函数名做函数参数
    	def func():
		    print("哈哈")
		def func2(fn):
		    print("我是func2")
		    fn()  #执行传递过来的fn 
		    print("我是func2")
		func2(func)  #把函数func当成参数传递给func2
		结果:我是func2
				   哈哈
				   我是func2
	e、函数名做函数的返回值
		def func():
		    print("函数1")
		    def func2():
		        print("函数2")
		    return func2
		fn = func()  #执行1,返回2
		fn()  #执行返回的函数
2、闭包函数的变量
	内层函数调用外层,让局部变量常驻内存
	def func():
    name = 'bubble'  # 常驻内存 防止其他程序修改这个变量
    def inner():
        print(name)
    print(inner.__closure__) # 查看是否为闭包,若为none则不是
    return inner
	ret = func()
	ret()

3、迭代器
	可迭代对象(Iterable):str,list,tuple,set,dict,range这些数据类型都包含了函数__iter__(),可以通过dir()来查看对象包含了那些东西
	迭代器(Iterator):file
	li = [1,2,3]
	it = li.__iter__()
	# 模拟for循环
	while True:
	    try:
	        name = it.__next__()
	        print(name)
	    except StopIteration: #拿完了
	        break

4、 li = [1,2,3]
	print("__iter__" in dir(li)) #判断是否可迭代
    print("__next__" in dir(li))  #判断是否为迭代器
    
    from collections import Iterable  # 可迭代
	from collections import Iterator  # 迭代器
	print(isinstance(li,Iterable))  # isinstance(对象,类型) 判断xx对象是否是xx类型
	print(isinstance(li,Iterator))
总结:iterable可迭代对象,内部包含__iter__()函数
	 iterable迭代器,内部包含__iter__()、__next__()函数
	 迭代器一定可迭代,可迭代不一定是迭代器
特点:节省内存、惰性机制、不能反复,只能向下执行
	
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章