本篇文章主要是對python學習時的一些總結,作為學習筆記記錄。
之前介紹了關於函式的基本結構,引數傳遞時的裝包和解包,這篇文章主要說明函式巢狀呼叫,內部函式,閉包和裝飾器的概念。
函式巢狀呼叫是指在函式內部又呼叫了別的函式。
def func1():
print(1)
def func2():
func1()
print(2)
func2()
結果為:
1
2
函式巢狀呼叫只是在函式內部呼叫另外的函式,而內部函式則是在函式內部巢狀定義函式。
之前我們提到過函式靜態變數的概念,那時我們猜測python中的函式可能是乙個特殊的型別,可以在函式內部宣告屬於函式的成員變數。而內部函式可以認為是在函式這個特殊型別內部又宣告了乙個特殊型別的變數。
當然,內部函式也具有一些特點:
name = 'wood'
grade = [70,80,90]
def func():
# 外部函式宣告
admin = 'jack'
time = [20,30,40]
# 函式定義
def foo():
global name
nonlocal admin
inner = 'foo'
print(name, grade, admin, time, inner)
name = 'tom'
grade[1] = 100
admin = 'anna'
time[1] = 50
print(name, grade, admin, time, inner)
print(locals())
print(globals())
# 函式呼叫
foo()
func()
結果為:
wood [70, 80, 90] jack [20, 30, 40] foo
tom [70, 100, 90] anna [20, 50, 40] foo
, '__builtins__': , '__file__': 'f:/....../demo.py', '__cached__': none, 'name': 'tom', 'grade': [70, 100, 90], 'func': }
從上邊的結果可以看出:
在外部函式中定義內部函式,並且內部函式中使用到了外部函式的變數,並且在外部函式中返回內部函式,python中把這種情況叫做閉包。閉包是裝飾器的基礎,而內部函式則是閉包的基礎。
從上邊閉包的定義看來,閉包的形成需要有幾個條件:
def func():
a = 10
def foo():
b = 20
print(a, b)
return foo
handle = func()
handle()
結果為:
10 20
從上邊的結果可以看出:
但閉包也會存在一定的缺點:
對於閉包來說:
python程式設計基礎之三十五
系統的魔術方法 系統的魔術方法特別多,但是也都特別容易懂,簡單的講就是對系統的內建函式進行重寫,你需要什麼效果就重寫成什麼樣,比如說len 方法針對的物件本來沒有自定義類的物件,但是當你重寫了 len 這個魔術方法時候,就可以對你需要的進行計算了,這個需要積累 這裡給個例子吧 1 class dog...
python程式設計基礎之二十五
匿名函式 不用def 定義的函式,沒有函式名 lambda 引數1 引數2 引數3 引數n 表示式 def test print 我是測試函式 print test 函式名是變數,指向了函式物件 pf test pf變數也指向了函式物件,所以也可以通過pf呼叫test函式 pf 傳入函式 乙個函式接...
python基礎3 函式
1 函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的 段。2 函式能提高應用的模組性,和 的重複利用率。你已經知道python提供了許多內建函式,比如print 但你也可以自己建立函式,這被叫做使用者自定義函式。你可以定義乙個由自己想要功能的函式,以下是簡單的規則 2 任何傳入引數和自變數...