摘要:返回該函數(shù)的時候,攜帶了該內(nèi)部函數(shù)引用的外部函數(shù)參數(shù)和局部變量。每次返回的函數(shù)都是不同的對象的結(jié)果為內(nèi)部函數(shù)本身被返回時,所攜帶的參數(shù)或局部變量時那一刻的值例如在函數(shù)內(nèi)有循環(huán),內(nèi)部函數(shù)引用的循環(huán)變量。
內(nèi)部函數(shù)
Python可以在函數(shù)內(nèi)部再定義一個函數(shù)。這個定義的內(nèi)部函數(shù)可以引用外部函數(shù)的參數(shù)和局部變量。
事實上,內(nèi)部函數(shù)還可以在其中再定義內(nèi)部函數(shù),實現(xiàn)內(nèi)部函數(shù)多重嵌套。
例如:
def fun_outer(x, y): def fun_inner(z): def fun_inner_inner(h): return x+y+z+h return fun_inner_inner(100) return fun_inner(20) print fun_outer(1, 2)返回函數(shù)本身
函數(shù)本身也是一個對象。因此我們可以在函數(shù)內(nèi)將一個內(nèi)部函數(shù)返回。返回該函數(shù)的時候,攜帶了該內(nèi)部函數(shù)引用的外部函數(shù)參數(shù)和局部變量。
def fun_outer(x, y): def fun_inner(z): def fun_inner_inner(h): return x+y+z+h return fun_inner_inner(100) return fun_inner(20) f = fun_outer(1, 2) print f
打印的結(jié)果為
如何讓它進一步計算呢,此時我們再執(zhí)行f(3)就會返回結(jié)果6。
f1 = fun_outer(1, 2) f2 = fun_outer(1, 2) print f1 print f2
print的結(jié)果為:
內(nèi)部函數(shù)本身被返回時,所攜帶的參數(shù)或局部變量時return那一刻的值
例如在函數(shù)內(nèi)有循環(huán),內(nèi)部函數(shù)引用的循環(huán)變量。
def fun_outer(x, y): funcs = [] for i in range(0,3): def fun_inner(): return x+y+i funcs.append(fun_inner) return funcs func1, func2, func3 = fun_outer(1, 2) print func1(),func2(),func3()
打印結(jié)果竟然三個函數(shù)都是5.其實這時候func_outer函數(shù)在返回一個函數(shù)列表的時候,i已經(jīng)循環(huán)到2了。因此func1、func2、func3攜帶的i參數(shù)都已經(jīng)是2了。因此最終計算結(jié)果都是5.
如何實現(xiàn)在有循環(huán)變量的時候,返回的函數(shù)攜帶的變量都是循環(huán)當時的值呢?
方法是再創(chuàng)建一個函數(shù),用該函數(shù)的參數(shù)綁定循環(huán)變量當前的值,無論該循環(huán)變量后續(xù)如何更改,已綁定到函數(shù)參數(shù)的值不變.
def fun_outer(x, y): funcs = [] for i in range(0,3): def fun_inner(c): def fun_inner_inner(): return x+y+c return fun_inner_inner funcs.append(fun_inner(i)) return funcs func1, func2, func3 = fun_outer(1, 2) print func1(),func2(),func3()
打印結(jié)果:3 4 5
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/38243.html
摘要:定義默認參數(shù)要牢記一點默認參數(shù)必須指向不變對象尾遞歸調(diào)用函數(shù)本身,但是的返回值不包含表達式。而尾指針相當于把常規(guī)的遞歸反過來,增加一層遞歸的同時釋放前一個遞歸指針,所以能夠始終保持只有一個棧幀在使用中。 教程 1、python大小寫敏感 如果字符串里面有很多字符都需要轉(zhuǎn)義,就需要加很多,為了簡化,Python還允許用r表示內(nèi)部的字符串默認不轉(zhuǎn)義 >>> print ...
摘要:局部變量只能在其被聲明的函數(shù)內(nèi)部訪問,而全局變量可以在整個程序范圍內(nèi)訪問。調(diào)用函數(shù)時,所有在函數(shù)內(nèi)聲明的變量名稱都將被加入到作用域中。 1. 變量作用域 Python 中,程序的變量并不是在哪個位置都可以訪問的,訪問權(quán)限決定于這個變量是在哪里賦值的。變量的作用域決定了在哪一部分程序可以訪問哪個特定的變量名稱。Python 的作用域一共有4種,分別是: L (Local) 局部作用...
摘要:數(shù)字和字符串,不能改變對象本身,只能改變引用的指向,稱為不可變數(shù)據(jù)對象。從開始,依次增加的值,直至等于或者大于將會輸出。該函數(shù)輸入姓名和各科的成績,輸出姓名和總共成績。表明該參數(shù)是關(guān)鍵字參數(shù),通常來講關(guān)鍵字參數(shù)是放在函數(shù)參數(shù)列表的最后。 基礎(chǔ) 局部變量與全局變量 函數(shù)中使用的變量是局部的 如果在外面的變量在函數(shù)中使用,需要加global關(guān)鍵字 APPLY = 100 # 全局變量 a ...
摘要:在循環(huán)外使用今天在練習一個題目求之內(nèi)的素數(shù)。表示從倒數(shù)第一個開始往前數(shù)如果是的話則表示從正數(shù)第一個到最后一個。同時,閉包要求外部函數(shù)的返回值是內(nèi)部函數(shù)的函數(shù)名。 18. random()的用法 #隨機整數(shù): >>> import random >>> random.randint(0,99) 21 #隨機選取0到100間的偶數(shù): >>> import random >>> rando...
摘要:類的介紹類用來描述具有相同的屬性和方法的對象的集合。類變量類變量在整個實例化的對象中是公用的。類的定義語法格式如下類有一個名為的特殊方法,也即是構(gòu)造函數(shù),該方法會在定義對象的時候自動調(diào)用,可以通過參數(shù)傳遞來對類的實例進行設(shè)定。 1. 類的介紹 類(Class) 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例,類是對象的抽象。 ...
閱讀 3146·2021-11-22 12:01
閱讀 3767·2021-08-30 09:46
閱讀 784·2019-08-30 13:48
閱讀 3209·2019-08-29 16:43
閱讀 1657·2019-08-29 16:33
閱讀 1848·2019-08-29 13:44
閱讀 1410·2019-08-26 13:45
閱讀 2228·2019-08-26 11:44