Python基礎之函式二

2022-05-04 06:54:11 字數 1987 閱讀 1612

通過名字就能理解,函式裡是還可以套著函式用的。這麼牛,下面就來看看幾段**,看看是怎麼回事。注意:函式一定是先定義後使用。

x=1234

def f1(): #定義乙個主函式

x = 1

print('f1---> ', x)

def f2(): #主函式下的巢狀函式

x = 2

print('f2-----> ', x)

def f3(): #主函式下的巢狀函式

x = 3

print('f3-------> ', x)

f3() #呼叫函式f3

f2()#呼叫函式f2

f1() #呼叫主函式

f1---> 1 #以下是輸出的結果

f2-----> 2

f3-------> 3

函式的特性:

1、函式可以被賦值

def foo(): #建立乙個函式

print('foo')

f=foo #給變數名為f的賦值為foo函式

print(f)

f() #變數名可以直接呼叫函式等同於發f()=foo()

2、可以把函式當成引數傳遞

def bar(func):#func=foo的值,給函式傳引數

print(func)

func()

bar(foo)#foo是上面那個函式的返回值

3、可以把函式當成返回值

def bar(func):

print(func)

return func

f=bar(foo) #將foo的值傳給func

print(f)

f()#列印func的記憶體位址和foo的一致

foo #f的值

4、把函式當做容器型別的元素去用(這個就不用舉例了,像列表、元組、字典等容器)

命名空間是名稱(識別符號)到物件的對映。

向命名空間新增名稱的操作過程涉及到繫結識別符號到指定物件的操作(以及給該物件的引用計數加 1 )。

命名空間分為:

1、內建命名空間

2、全域性命名空間

3、區域性命名空間

作用域分為:

1、l:local,區域性作用域,即函式中定義的變數;

2、e:enclosing,巢狀的父級函式的區域性作用域,即包含此函式的上級函式的區域性作用域,但不是全域性的;

3、g:globa,全域性變數,就是模組級別定義的變數;

4、b:built-in,系統固定模組裡面的變數,比如int, bytearray等。

搜尋變數的優先順序順序依次是:

作用域區域性》外層作用域》當前模組中的全域性》python內建作用域,也就是l>e>g>b。

閉包:首先必須是內部定義的函式,該函式包含對外部作用域而非全域性作用域定義變數的引用。

x=1234 #x為全域性作用域

def f1(): #定義乙個主函式 f1函式名為全域性作用域

x = 1

print('f1---> ', x)

def f2(): #f2為這個函式的區域性作用域

x = 2

print('f2-----> ', x)

def f3(): #f3為這個函式的區域性作用域

print('f3-------> ', x)

f3() #呼叫函式f3

f2()#呼叫函式f2

f1() #呼叫主函式

f1---> 1 #以下是輸出的結果

f2-----> 2

f3-------> 2 #這個值就是呼叫的父級函式變數名的值

總結:因為上面我們清楚了作用域搜尋變數的優先順序,在父級函式能匹配到對應的變數名的值,so,這個全域性作用域的x的值形同虛設。沒有引用到全域性作用域的變數名的值,這就是閉包。

Python基礎之函式的引數 二

函式引數總結 在python中函式引數的定義方式有一下4中方式。1 位置引數 2 關鍵字引數 3 預設引數 4 可變引數 args,kwargs 在我們在傳參的時候,實參傳遞的順序按照形參定義的順序進行傳遞的傳參方式。練習1 建立乙個求和函式,使用必須引數傳遞 defsum 2 num num1,n...

Python基礎 高階函式之返回函式(二)

既然函式是乙個變數,那麼當然可以把函式作為結果值返回。先簡單看乙個示例 首先我們定義乙個函式實現可變引數之積 from functools import reduce def fac args return reduce lambda x,y x y,args fac 1,2,3,4,5 120但是...

python之函式基礎

python 函式 python函式可以返回多值 defadd dif x,y,sum x y dif x y return sum,dif a,b add dif 2,3 print a,b 5 1 r add dif 2,3 print r 5,1 本質來說返回多值的函式其實返回乙個元組tupl...