python 函数可以作为容器对象的元素_11.Python初窥门径(函数名,可迭代对象,迭代器)...
python(函數(shù)名,可迭代對(duì)象,迭代器)
一、默認(rèn)參數(shù)的坑
# 比較特殊,正常來(lái)說(shuō)臨時(shí)空間執(zhí)行結(jié)束后應(yīng)該刪除,但在這里不是.
def func(a,l=[]):
l.append(a)
return l
print(func(1)) # [1]
print(func(2)) # [1,2]
print(func(3)) # [1,2,3]
二、函數(shù)名的應(yīng)用
函數(shù)名指向的是函數(shù)的內(nèi)存地址,加上()就執(zhí)行這個(gè)函數(shù)
def func(args):
return args
print(func) #
print(func(1)) # 1
函數(shù)名是一個(gè)變量
def age1(a):
return a
age2=age1
age3=age2
print(age3(1)) # 1
函數(shù)名可以作為容器類(lèi)類(lèi)型的元素
def func1():
print("in func1")
def func2():
print("in func2")
def func3():
print("in func3")
l=[func1,func2,func3]
print(l) # [, , ]
for i in l:
i()
# in func1
# in func2
# in func3
函數(shù)名可以作為函數(shù)的實(shí)參進(jìn)行傳參
def func(argv):
print(argv)
def func1():
print("in func1")
def func2(argv):
argv()
print("in func2")
a=1
func(a) # 1
func2(func1)
# in func1
# in func2
函數(shù)名可以作為函數(shù)的返回值
def func1():
print("in func1")
def func2(argv):
print("in func2")
return argv
ret=func2(func1)
print(ret)
# in func2
#
三、可迭代對(duì)象
字面意思分析 : 可以重復(fù)迭代的實(shí)實(shí)在在的東西,list,dict,keys(),values(),tuple,str,set,range,文件句柄這些都屬于可迭代對(duì)象
專業(yè)角度分析 : 內(nèi)部含有'_ iter _'方法的對(duì)象,就是可迭代對(duì)象
內(nèi)置函數(shù) : dir()用來(lái)獲取對(duì)象內(nèi)部屬性的方法,可用來(lái)判斷對(duì)象是否符合可迭代要求.
優(yōu)點(diǎn) : 直觀,操作方法較多
缺點(diǎn) : 占用內(nèi)存(字典除外),不能迭代取值,索引,字典key
四、迭代器
字面意思分析 : 可以重復(fù)迭代的工具
專業(yè)角度分析 : 內(nèi)部含有'_ iter_ '并且含有'_ next _'方法的對(duì)象,就是迭代器
可迭代對(duì)象轉(zhuǎn)化成迭代器用iter(),迭代器可以迭代取值,利用next()進(jìn)行取值,迭代器一條路走到底,不走回頭路
優(yōu)點(diǎn) : 非常節(jié)省內(nèi)存,惰性機(jī)制
缺點(diǎn) : 不直觀,操作不靈活,效率相對(duì)低
l1=[1,2,3,4,5]
obj=iter(l1)
print(next(obj)) # 1
print(next(obj)) # 2
print(next(obj)) # 3
print(next(obj)) # 4
print(next(obj)) # 5
print(next(obj)) # 報(bào)錯(cuò)
利用while循環(huán),模擬for循環(huán)內(nèi)部循環(huán)可迭代對(duì)象機(jī)制
先要將可迭代對(duì)象轉(zhuǎn)化成迭代器
利用next()對(duì)迭代器進(jìn)行取值
利用異常處理try,處理報(bào)錯(cuò)
l1=[1,2,3,4,5]
l2=iter(l1)
while 1:
try:
print(next(l2))
except stopiteration:
pass
五、可迭代對(duì)象與迭代器對(duì)比
可迭代對(duì)象是一個(gè)操作比較靈活,直觀,效率相對(duì)較高,但是比較占用內(nèi)存的數(shù)據(jù)集
迭代器是一個(gè)非常節(jié)省內(nèi)存,滿足惰性機(jī)制,但是效率相對(duì)較低,操作不靈活的數(shù)據(jù)集
如您對(duì)本文有疑問(wèn)或者有任何想說(shuō)的,請(qǐng)點(diǎn)擊進(jìn)行留言回復(fù),萬(wàn)千網(wǎng)友為您解惑!
總結(jié)
以上是生活随笔為你收集整理的python 函数可以作为容器对象的元素_11.Python初窥门径(函数名,可迭代对象,迭代器)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python修改密码业务_Python:
- 下一篇: Castor xsd生成java_jav