python之路 函式高階內容

2022-04-10 16:21:47 字數 3443 閱讀 7262

1、函式巢狀的呼叫

#

定義函式

defmax2(x,y):

m = x if x>y else y #三元運算:結果 = if條件成立的結果 if 條件 else if條件不成立的結果

returnm#

函式巢狀

defmax4(a,b,c,d):

res1 =max2(a,b)

res2 =max2(res1,c)

res3 =max2(res2,d)

return

res3

#print(max4(23,-7,31,11))

2、函式巢狀的定義

def

func():

print(123)

deffunc2():

print(234)

func2()

#func()

二、命名空間及作用域

1、命名空間

三種命名空間的載入順序:內建命名空間(程式執行前載入)->全域性命名空間(程式執行中:從上到下載入)->區域性命名空間(程式執行中:呼叫時才載入)。在區域性,自己有的變數名就用自己的,自己沒有的就逐級向上找,甚至到全域性的。但是全域性不可以使用區域性的命名空間。

2、作用域

作用域:站在範圍小的區域性,如果區域性有用區域性,區域性沒有往上一層找,一層一層往上找,找到第乙個可用的名字就用這個

(1)global:修改全域性命名空間裡的變數值

a =0

defdemo1():

global

a a = 2

print

(a)demo1()

#輸出結果為:2

print(a) #輸出結果為:2

(2)nonlocal:只修改區域性命名空間裡的 從內部往外部找到第乙個對應的變數名

#

global情況

a =0

defdemo1():

a = 1

defdemo2():

defdemo3():

global

a a = '

小神仙'

print

(a) demo3()

print

(a) demo2()

print

(a)demo1()

#輸出結果為:小神仙 1 1

print(a) #輸出結果為:小神仙 (全域性空間變數a被修改)

#

nonlocal情況

a =0

defdemo1():

a = 1

defdemo2():

defdemo3():

nonlocal a

a = '

小神仙'

print

(a) demo3()

print

(a) demo2()

print

(a)demo1()

#輸出結果為:小神仙 小神仙 小神仙

print(a) #輸出結果為:0 (全域性空間變數a未被修改)

三、函式名的本質

函式名本質是函式的記憶體位址

1、可以被引用

def

func():

print('

in func')

f =func

2、可以被當做容器類資料的元素

def

f1():

print('f1'

)def

f2():

print('f2'

)def

f3():

print('f3'

)l =[f1,f2,f3]

d = #呼叫

l[0]() #結果輸出為:f1

d['f2

']() #結果輸出為:f2

3.可以當變數使用(函式引數或者返回值)

def

alex():

print(123)

deffunc():

return

alex

ret =func()

print(ret())

四、閉包函式

內部函式包含對外部作用域而非全域性作用域中的變數引用,內部函式就稱為閉包函式。

1、閉包函式最常用的用法:將內部函式返回,實現通過外部呼叫內部函式。

#

從網頁上爬取資訊

from urllib.request import urlopen #

模組def

get_url():

url = '

'def

inner():

ret =urlopen(url).read()

return

ret

return

inner

get_web =get_url()

print(get_web())

2、閉包函式的判斷

#

輸出的__closure__有cell元素 :是閉包函式

deffunc():

name = '

eva'

definner():

print

(name)

print(inner.__closure__

)

return

inner

f =func()

f()#

輸出的__closure__為none :不是閉包函式

name = '

egon

'def

func2():

definner():

print

(name)

print(inner.__closure__

)

return

inner

f2 =func2()

f2()

Python學習之路 高階函式

python語言中,一切皆物件。函式本身也是乙個物件,我們知道函式的引數可以傳遞任意物件,函式的返回值也可以返回任意物件,那麼在python中函式能不能傳遞或者返回乙個函式呢?答案是當然可以,我們把這種傳參為函式或者返回值為函式物件的函式稱為高階函式。定義 在計算過程中,如果其中後一步都要用到前一步...

python 函式的高階內容

python的函式也是一種值,所有函式都是function 物件,這意味著可以把函式本身賦值給變數,就像把整數 浮點數 列表 元組賦值給變數一樣 定義乙個計算乘方的函式 def pow base,exponent result 1 for i in range 1,exponent 1 result...

Python高階之路 7 2 1 建立函式

在前面提到,函式是可以呼叫的,而且是可以互動的,既然可以呼叫和互動,那麼久需要有乙個函式名,以及函式引數和返回值。這是函式的三個重要元素,其中函式名是必須的,函式引數和返回值是可選的。如果函式只是簡單的執行某段 並不需要與外部進行互動,那麼函式引數與返回值可以省略。定義函式要使用def語句。def ...