python生成器是用來代替"不一定能夠使用全部元素的數(shù)組",等到使用某一元素時,才生成該元素,用來節(jié)省空間.
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比宛城網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式宛城網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋宛城地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。
python生成器寫法有兩種
第一種:(數(shù)組生成式的中括號變成小括號)
# 生成器
arr = (x for x in range(1,6))
# 生成器下一個元素用next()來取得
print("--next1--")
print(next(arr))
print("--next2--")
print(next(arr))
print("--next3--")
print(next(arr))
輸出結(jié)果:
--next1--
1
--next2--
2
--next3--
3
第二種方式: 使用關(guān)鍵字 yield 關(guān)鍵字
# 斐波那契數(shù)列生成器
def creatNum():
print("---開始執(zhí)行生成器方法---")
a,b = 0,1
for i in range(0,5):
print("--step1--")
yield b
print("--step2--")
a,b = b,a+b
print("--step3--")
print("--..stop..--")
print("直接調(diào)用方法...")
print(creatNum())
#這里用一個標識符來指向生成器(不要把creatNum()當做函數(shù))
func = creatNum()
#一次生成
print("使用next調(diào)用")
x = next(func)
print(x)
#又一次生成
print("使用next調(diào)用")
x = next(func)
print(x)
print("使用next調(diào)用")
x = next(func)
print(x)
輸出結(jié)果:
直接調(diào)用方法...
使用next調(diào)用
---開始執(zhí)行生成器方法---
--step1--
1
使用next調(diào)用
--step2--
--step3--
--step1--
1
使用next調(diào)用
--step2--
--step3--
--step1--
2
生成器還可以用 生成器.next 來調(diào)用,等價于 next(生成器)
如果使用next來調(diào)用,調(diào)用到生成器執(zhí)行完畢,就會崩掉. 我們基本不會使用next來執(zhí)行生成器
一般來說會用for循環(huán)來執(zhí)行生成器:
# 斐波那契數(shù)列生成器
def creatNum():
print("---開始執(zhí)行生成器方法---")
a,b = 0,1
for i in range(0,5):
print("--step1--")
yield b
print("--step2--")
a,b = b,a+b
print("--step3--")
print("--..stop..--")
print("直接調(diào)用方法...")
print(creatNum())
#這里用一個標識符來指向生成器(不要把creatNum()當做函數(shù))
func = creatNum()
#使用for循環(huán)來執(zhí)行生成器
for i in func:
print(i)
輸出結(jié)果: (執(zhí)行完畢不會崩潰)
直接調(diào)用方法...
---開始執(zhí)行生成器方法---
--step1--
1
--step2--
--step3--
--step1--
1
--step2--
--step3--
--step1--
2
--step2--
--step3--
--step1--
3
--step2--
--step3--
--step1--
5
--step2--
--step3--
--..stop..--
在執(zhí)行生成器時,可以使用 生成器.send(param) 方法
send方法不光是執(zhí)行一步next操作,還會把send里面的參數(shù)傳到生成器中充當yield表達式的返回值
**(注意:第一次執(zhí)行,send里面的參數(shù)應(yīng)該為None,或者使用next方法)
def test():
i = 0
while i 5:
temp = yield i
print(temp)
i += 1
t = test()
#先使用next執(zhí)行,看能出來什么結(jié)果
t.__next__()
t.__next__()
print(t.__next__())
#使用send執(zhí)行
t.send("1231231231223123")
print(t.send("hahahahhahaha"))
輸出結(jié)果: (可見next輸出temp為none , 而send 則把值傳遞進了生成器)
None
None
2
1231231231223123
hahahahhahaha
4
1. print(L.values()) or type() L是個字典,values keys 那幾個是字典的幾個方法
2. print or type(g) g是生成器
3. 錯誤信息已經(jīng)寫的很清楚了 你問題說反了,fib(8)是生成器
其實是類型不同
existKill函數(shù)會返回一個可迭代對象,后面的帶數(shù)字中括號是對其內(nèi)部元素的引用
用Python的replace函數(shù)就可以去除字符串中的所有中括號
完整的Python程序如下
#!/usr/bin/python?
str?=?'?[[[[239,?267]],?[[238,?268]],?[[237,?268]],?[[236,?269]],?[[235,?269]],?[[234,?270]],?[[233,?270]],?[[232,?271]],?[[232,?281]],[[240,?289]],?[[241,?289]],?[[241,?287]],?[[242,?286]],?[[242,?284]],?[[243,?283]],?[[243,?279]],?[[244,?278]],?[[244,?273]],?[[243,272]],?[[243,?271]],?[[242,?270]],?[[242,?269]],?[[240,?267]]]]'?
out=str.replace('[','').replace(']','')
print(out)
運行結(jié)果
239,?267,?238,?268,?237,?268,?236,?269,?235,?269,?234,?270,?233,?270,?232,?271,?232,?281,?240,?289,?241,?289,?241,?287,?242,?286,?242,?284,?243,?283,?243,?279,?244,?278,?244,?273,?243,?272,?243,?271,?242,?270,?242,?269,?240,?267
直接輸入即可。python在括號里直接輸入數(shù)字即可,運用print函數(shù)的功能為將函數(shù)括號里的內(nèi)容輸出到屏幕上,括號里是數(shù)字就直接打數(shù)字,如print(1234),括號里是字符要加單引號或雙引號,
這樣寫你看下:這是這種寫法無法將x傳到b里面去
def b(y):
return x+y
def a(x):
return b
其實你調(diào)用a--打印的是a的內(nèi)存地址,a(x)就是調(diào)用的a方法,返回的是b相當于你直接打印b的內(nèi)存地址一樣,
所以
a--函數(shù)a的內(nèi)存地址
a(x) --調(diào)用a方法,返回b函數(shù)對象相當于--b
a(x)(y)--b(y)調(diào)用b方法返回x和y的值,這里x取的是a方法的參數(shù)值,y是b方法的參數(shù)值,這點可以理解下參數(shù)的作用域
新聞名稱:python括號函數(shù) python函數(shù)括號里放什么
地址分享:http://www.muchs.cn/article48/doseoep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站設(shè)計公司、品牌網(wǎng)站制作、關(guān)鍵詞優(yōu)化、標簽優(yōu)化、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)