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__()函數
	 迭代器一定可迭代,可迭代不一定是迭代器
特點:節省內存、惰性機制、不能反覆,只能向下執行
	
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章