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