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