函數(shù)的尾部 return 要是用的返回值 def roll_dice(number=3, points=None): print('Choice points...') if points is None: points = [] while number 0: point = random.randrange(1, 7) points.append(point) number = number - 1 return points
創(chuàng)新互聯(lián)建站專注于岳麓企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開(kāi)發(fā),商城開(kāi)發(fā)。岳麓網(wǎng)站建設(shè)公司,為岳麓等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
(1)unpack tuple和list, 可以讓函數(shù)返回多個(gè)值
def count():
return (1, 2, 3) # 或者 return [1, 2, 3]
# 把列表解包,把1 2 3 分別賦值給 a b c
a, b, c = count()
print a, b, c
# 輸出 1, 2, 3
(2)假設(shè)你知道Python的dict類型。Python中,在函數(shù)中定義一個(gè)變量的時(shí)候,會(huì)在一個(gè)隱藏的叫l(wèi)ocals的dict里面插入key-value,其中key是變量名,value是變量值。而引用一個(gè)變量的時(shí)候,則首先會(huì)在這個(gè)叫l(wèi)ocals的dict里面,根據(jù)變量名作為key,去查對(duì)應(yīng)的值。
var = 1 # 你可以認(rèn)為這里進(jìn)行了 locals['var'] = 1 的操作
print var # 在對(duì)var變量進(jìn)行求值的時(shí)候,就在locals['var']里面找var變量對(duì)應(yīng)的值
(3)for循環(huán)中,每次循環(huán)只是給 `i` 重新綁定值
for i in (1, 2, 3):
print i
print i
# 一次輸入 1 2 3 3
每次`for i in (1, 2, 3)`相當(dāng)于在`print i`之前,進(jìn)行了
`locals['i'] = 1`
`locals['i'] = 2`
`locals['i'] = 3`
的操作
所以最后的`print i`再去locals字典里面找`i`的時(shí)候,就變成 3 了。
(4)閉包是 一個(gè)函數(shù)加上這個(gè)函數(shù)引用的外部變量
var = 1
def f():
print var
# 這里的閉包是函數(shù) f 和 f 引用的外部變量 var
def count():
var2 = 2
def f():
print var2
# 這里的閉包是函數(shù) f 和 f 引用的外部變量 var2
return f
拿第一個(gè)函數(shù) f 來(lái)說(shuō)。在 f 運(yùn)行的時(shí)候,解釋器拿著'var'這個(gè)字符串去locals字典里面找,發(fā)現(xiàn)找不到,于是在closure字典里面找,最后closure字典里面找,你可以認(rèn)為就是找closure['var'],然后發(fā)現(xiàn)找到對(duì)應(yīng)的值。count里面的 f 函數(shù)同理。
(為了容易理解,我這里說(shuō)謊了。實(shí)際上 f 壓根沒(méi)有closure,count里面的 f 才有。其實(shí)closure壓根不是像locals那樣的字典)
(5)函數(shù)定義時(shí),函數(shù)只是記錄變量的名字。
要區(qū)分什么是名字,什么是值。
`i = 1`這里 i 只是名字,只是一個(gè)字符串 'i' 。這句話運(yùn)行完,locals['i'] = 1,就說(shuō) i 對(duì)應(yīng)的值是1
def count():
fs = []
for i in range(1, 4):
# 定義一個(gè)函數(shù),等價(jià)于運(yùn)行了 locals['f'] = 真正生成的函數(shù)
# 每次循環(huán),這里都會(huì)重新生成一個(gè)函數(shù),然后把重新生成的函數(shù)賦值給 locals['f']
def f():
return i * i # 引用了'i'這個(gè)名字,但并不是引用了'i'對(duì)應(yīng)的值
# 等價(jià)于 locals['fs'].append(locals['f'])
# f 不是函數(shù),它只是一個(gè)名字'f'。f 引用的東西,也就是locals['f']才是真正的函數(shù)
fs.append(f)
# 于是這個(gè)for循環(huán)生成了三個(gè)函數(shù),這三個(gè)函數(shù)是沒(méi)有名字的,這個(gè)函數(shù)運(yùn)行完后,它們跟'f'這個(gè)名字就毛關(guān)系都沒(méi)有了(是的我說(shuō)慌了,但可以先不管)
# 把整個(gè)列表返回,這個(gè)列表包含了三個(gè)函數(shù)
return fs
# count()返回三個(gè)函數(shù)的列表,unpack 列表的語(yǔ)法把列表中的三個(gè)函數(shù)抽出來(lái),重新給他們命名為 f1, f2, f3
# 也就是說(shuō),
# locals['f1'] = 列表中的第1個(gè)函數(shù)
# locals['f2'] = 列表中的第2個(gè)函數(shù)
# locals['f3'] = 列表中的第3個(gè)函數(shù)
# 這三個(gè)函數(shù)跟'f'這個(gè)名字現(xiàn)在毛關(guān)系都沒(méi)有。(其實(shí)是有的,但為了說(shuō)明需要簡(jiǎn)化,現(xiàn)在你可以完全不管括號(hào)里面說(shuō)的話)
f1, f2, f3 = count()
print f1(), f2(), f3()
# 好了我們運(yùn)行它們,輸入都是 9
# def f():
# return i * i
這是因?yàn)?f1 現(xiàn)在對(duì)應(yīng)的函數(shù),里面引用了 'i' 這個(gè)字符串,我們根據(jù) 'i '這個(gè)字符串去找它對(duì)應(yīng)的值,先找到 f 當(dāng)前的locals字典,發(fā)現(xiàn)沒(méi)有,因?yàn)楹瘮?shù)定義的時(shí)候沒(méi)有定義 i 變量。然后再去closure['i']里面找,因?yàn)镻ython是通過(guò)closure字典實(shí)現(xiàn)閉包的(就當(dāng)它是對(duì)的好不好),所以我們可以在closure['i']找到值,這個(gè)值就是我們上一次運(yùn)行的時(shí)候count函數(shù)里面殘留的locals['i'],而由于for循環(huán)三遍之后,locals['i'] == 3,所以找到 i 的值就是3。所以最后輸出都是9
python的函數(shù)其實(shí)只是一個(gè)callable的類,擁有特殊功能,僅此而已。他也可以指向一個(gè)變量名,所以可以作為返回值返回
return
會(huì)直接另函數(shù)返回,函數(shù)就運(yùn)行結(jié)束了,所有該函數(shù)體內(nèi)的代碼都不再執(zhí)行了,所以該函數(shù)體內(nèi)的循環(huán)也不可能再繼續(xù)運(yùn)行。
如果你需要讓循環(huán)繼續(xù)執(zhí)行,就不能return函數(shù),而應(yīng)該選用break或者continue。
break:跳出所在的當(dāng)前整個(gè)循環(huán),到外層代碼繼續(xù)執(zhí)行。
continue:跳出本次循環(huán),從下一個(gè)迭代繼續(xù)運(yùn)行循環(huán),內(nèi)層循環(huán)執(zhí)行完畢,外層代碼繼續(xù)運(yùn)行。
return:直接返回函數(shù),所有該函數(shù)體內(nèi)的代碼(包括循環(huán)體)都不會(huì)再執(zhí)行。
python 函數(shù)返回值有兩種形式:
1 返回一個(gè)值。
2 返回多個(gè)值。
現(xiàn)看看返回一個(gè)值的吧。
def firstvalue(a,b):
c = a + b
return c
print firstvalue(1,2)結(jié)果:3
再看看返回多個(gè)值的: 那怎么可以返回多個(gè)值呢,其他的語(yǔ)言一般調(diào)用函數(shù)的話,只能返回一個(gè)值,可能我不太熟悉所有的語(yǔ)言,我知道的語(yǔ)言只能返回一個(gè)值,而python可以返回多個(gè)值,感覺(jué)非常方便,發(fā)代碼看下:
def secondvalue(a,b):
c = a + b
return (a,b,c)
x,y,z = secondvalue(1,2)
print 'x:',x,'y:',y,'z:',z
網(wǎng)站名稱:python返回函數(shù)知乎 python函數(shù)返回函數(shù)自身
新聞來(lái)源:http://jinyejixie.com/article12/dochdgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、網(wǎng)站維護(hù)、搜索引擎優(yōu)化、域名注冊(cè)、App開(kāi)發(fā)、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)