1. 程式人生 > >py11_函數對象、嵌套、名稱空間與作用域

py11_函數對象、嵌套、名稱空間與作用域

aps spl 不可 數據 true DC 退出 除了 函數定義

一、函數對象

函數是一類對象的含義是函數可以被當作各種數據來進行處理

1.引用

2.當作參數傳給另一個函數

3.當作函數的返回值

4.當作容器類型的元素(如:list)

技術分享圖片
 1 def pay():
 2     print("支付")
 3 def withdraw():
 4     print("取款")
 5 def transfer():
 6     print("轉賬")
 7 func_dic={
 8     "1":pay,
 9     "2":withdraw,
10     "3":transfer,
11 }
12 while True:
13     msg="""
14 1 支付 15 2 取款 16 3 轉賬 17 q 退出 18 """ 19 print(msg) 20 choice=input(">>>:").strip() 21 if choice=="q":break 22 if choice not in func_dic: 23 print("指令不存在") 24 continue 25 func_dic[choice]() # 選擇指令開始執行函數
當作容器的例子

二、函數的嵌套

1. 函數嵌套的定義

def func1():
    def func2():
        print("func2")
    func2()
func1()

2.函數嵌套的調用

def max2(x,y):
    if x > y :
        return x
    else:
        return y
def max4(a,b,c,d):
    res1=max2(a,b)
    res2=max2(res1,c)
    res3=max2(res2,d)
    return res3
print(max4(99,88,77,66))

三、名稱空間域作用域

1. 什麽是名稱空間?

名稱空間是存放名字(變量名)與值(變量值)綁定關系的地方。

2. 名稱空間分成三大類

2.1 內置名稱空間

作用:用來存放python解釋器自帶的名字

生命周期:在解釋器啟動時生效,在解釋器關閉時失效

2.2 全局名稱空間

作用:除了內置與局部的名字外,剩下的都是全局名字

生命周期:在文件執行時生效,在文件執行完畢時失效

2.3 局部名稱空間

作用:用於存放函數調用期間函數體產生的名字

生命周期:在文件執行過程中,只有調用了某個函數才會臨時生效,在函數執行完畢後失效

???註意

三種名稱空間的加載順序與名字查找順序時相反的

加載順序:內置→全局→局部

查找名字順序:局部←全局←內置

3.作用域(重點????)

作用域即產生作用的範圍

3.1分類

全局作用域(內置名稱空間與全局名稱空間)

全局有效,全局存活

局部作用域(局部名稱空間)

局部有效,臨時存活

作用域關系:在函數定義階段就已經固定完成了,只要調用函數就需到定義階段去找作用域關系

3.2 global

3.2.1 在局部想要修改全局的可變類型,不需要借助任何聲明,可以直接修改。

3.2.2 在局部想要修改全局的不可變類型,需要借助global聲明,聲明成全局變量就可以直接修改了。

py11_函數對象、嵌套、名稱空間與作用域