return語句就是講結(jié)果返回到調(diào)用的地方,并把程序的控制權(quán)一起返回
程序運(yùn)行到所遇到的第一個(gè)return即返回(退出def塊),不會再運(yùn)行第二個(gè)return。
要返回兩個(gè)數(shù)值,寫成一行即可:
defa(x,y):
ifx==y:
returnx,y
printa(3,3)
>>>3,3
但是也并不意味著一個(gè)函數(shù)體中只能有一個(gè)return語句,例如:
deftest_return(x):
ifx>0:
returnx
else:
return0
函數(shù)沒有return,默認(rèn)return一個(gè)None對象。
遞歸函數(shù)中沒有return的情況:
defgcd(a,b):
ifa%b==0:
returnb
else:
gcd(b,a%b)
分析:else中沒有return就沒有出口,這個(gè)程序是自己內(nèi)部運(yùn)行,程序沒有返回值,
python和print的區(qū)別:
x=1
y=2
defadd(x,y):
z=x+y
returnz
print(add(x,y)
x=1
y=2
defadd(x,y):
z=x+y
printz
print(add(x,y))
在交互模式下,return的結(jié)果會自動(dòng)打印出來,而作為腳本單獨(dú)運(yùn)行時(shí)則需要print函數(shù)才能顯示。
默認(rèn)情況下,遇見return函數(shù)就會返回給調(diào)用者,但是try,finally情況除外:
deffunc():
try:
print98
return'ok'#函數(shù)得到了一個(gè)返回值
finally:#finally語句塊中的語句依然會執(zhí)行
print98
printfun()
輸出:
98
98
ok
函數(shù)作為返回值返回:
deflazy_sum(*args):
defsum():
x=0
forninargs:
x=x+nreturnxreturnsum
lazy_sum(1,2,3,4,5,6,7,8,9)#這時(shí)候lazy_sum并沒有執(zhí)行,而是返回一個(gè)指向求和的函數(shù)的函數(shù)名sum的內(nèi)存地址。
f=lazy_sum(1,2,3,4,5,6,7,8,9)
print(type(f))
print(f())#調(diào)用f()函數(shù),才真正調(diào)用了sum函數(shù)進(jìn)行求和,
這其實(shí)就是閉包。
返回一個(gè)函數(shù)列表:
defcount():
fs=[]
foriinrange(1,4):
deff():
returni*i
fs.append(f)
returnfs
f1,f2,f3=count()
print(f1())
print(f2())
print(f3())
輸出:
9
9
9
執(zhí)行過程:
當(dāng)i=1,執(zhí)行for循環(huán),結(jié)果返回函數(shù)f的函數(shù)地址,存在列表fs中的第一個(gè)位置上。
當(dāng)i=2,由于fs列表中第一個(gè)元素所指的函數(shù)中的i是count函數(shù)的局部變量,i也指向了2;然后執(zhí)行for循環(huán),結(jié)果返回函數(shù)f的函數(shù)地址,存在列表fs中的第二個(gè)位置上。
當(dāng)i=3,同理,在fs列表第一個(gè)和第二個(gè)元素所指的函數(shù)中的i變量指向了3;然后執(zhí)行for循環(huán),結(jié)果返回函數(shù)f的函數(shù)地址,存在列表fs中的第三個(gè)位置上。
所以在調(diào)用f1()的時(shí)候,函數(shù)中的i是指向3的:
f1():
return3*3
同理f2(),f3()結(jié)果都為9
閉包時(shí)牢記的一點(diǎn)就是:返回函數(shù)不要引用任何循環(huán)變量,或者后續(xù)會發(fā)生變化的變量。即包在里面的函數(shù)(本例為f()),不要引用外部函數(shù)(本例為count())的任何循環(huán)變量
如果一定要引入循環(huán)變量,方法是再創(chuàng)建一個(gè)函數(shù),用該函數(shù)的參數(shù)綁定循環(huán)變量當(dāng)前的值,無論該循環(huán)變量后續(xù)如何更改,已綁定到函數(shù)參數(shù)的值不變:
defcount():
fs=[]foriinrange(1,4):
deff(j):
defg():returnj*jreturng
fs.append(f(i))returnfs
f1,f2,f3=count()
print(f1())
print(f2())
print(f3())
以上內(nèi)容為大家介紹了python培訓(xùn)之如何使用return語句,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。