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