在學習返回函式的時候,函式只是在呼叫的時候才會執行一直不理解,隔天後在來看的時候明白了一些,記錄一下。
看**
>>> deffun1(n):
...
deffun2(x):
...
return
pow(x,n)
...
return
fun2
...>>> pow2=fun1(2)
>>>pow2
.fun2 at 0x7f8bdfe2e378>
>>> pow2(9)
81
看這個函式的定義是將fun1()下定義的函式fun2()返回fun2()位址,當將fun1(2)的返回的fun2位址賦給pow2後當執行pow2(9)的時候才執行了fun1()內定義的函式即fun2(),即fun1(9,2)。
還有就是返回函式中的在乙個內部函式裡對外部作用域(但不是全域性作用域)的變數進行引用,內部函式稱為閉包(closure)。其中用到了迴圈
defcount():
fs=for i in range(1,4):
deff():
return i*i
#把函式f位址追加至列表fs
#返回為乙個包含3個函式f位址的列表
returnfs
print('
count函式返回乙個列表,列表分別為函式f位址
',count())
f1,f2,f3 =count()
print(f1,'
f1執行結果是
',f1())
print(f2,'
f2執行結果是
',f2())
print(f3,'
f3執行結果是
',f3())
count函式返回乙個列表,列表分別為函式f位址 [.f at 0x7fc5d30cac80>, .f at 0x7fc5d30cad08>, .f at 0x7fc5d30cad90>].f at 0x7fc5d30cac80> f1執行結果是 9
.f at 0x7fc5d30cad08> f2執行結果是 9
.f at 0x7fc5d30cad90> f3執行結果是 9
結果全是9,而不是所希望的1,4,9
在這個函式中i是count函式的區域性變數
當i= 1時,i指向了1,結果返回了函式的位址放在了fs的第乙個位置。
當i = 2時,又將i 指向了2,函式位址返回到了fs的第二個位置上。
當i = 3 時,i 指向了3,然後返回了函式位址在fs的第三個位置。
所以當呼叫函式顯示的時候,i 已經是3,所以得到的結果是一樣的。
defcount():
fs=for i in range(1,4):
deff(j):
defg():
return j*j
return
g
#返回為乙個包含3個函式f位址的列表
returnfs
print('
count函式返回乙個列表,列表分別為函式f位址
',count())
f1,f2,f3 =count()
print(f1,'
f1執行結果是
',f1())
print(f2,'
f2執行結果是
',f2())
print(f3,'
f3執行結果是
',f3())
count函式返回乙個列表,列表分別為函式f位址 [.f..g at 0x7ff488311d08>, .f..g at 0x7ff488311c80>, .f..g at 0x7ff488311d90>].f..g at 0x7ff488311c80> f1執行結果是 1
.f..g at 0x7ff488311d08> f2執行結果是 4
.f..g at 0x7ff488311d90> f3執行結果是 9
這樣修改後就得到了希望的結果。
**中f(j)將迴圈中i的值傳給了j,當i處於迴圈中時返回的函式並不是指向i,而是將它的數值傳給了j並指向j。
python返回函式 python中返回函式
python的函式不但可以返回int str list dict等資料型別,還可以返回函式!例如,定義乙個函式 f 我們讓它返回乙個函式 g,可以這樣寫 deff print call f 定義函式g defg print call g 返回函式g return g 仔細觀察上面的函式定義,我們在函...
python返回 python 返回函式
返回函式 1.高階函式除了能夠接收函式作為引數外,還能把函式作為結果返回 2.例如乙個求和函式,通常情況下的定義以及呼叫 def sum nums x 0for n in nums x x n return x sum 1,2,3,4,5 不返回求和的結果,而是返回求和的函式 def sum 1 n...
python 返回函式
返回函式 python的函式不但可以返回int str list dict等資料型別,還可以返回函式!例如,定義乙個函式 f 我們讓它返回乙個函式 g,可以這樣寫 deff print call f 定義函式g defg print call g 返回函式g return g仔細觀察上面的函式定義,...