1.函數是一個可執行語句(邏輯語句,不是物理語句)
2.函數執行是通過綁定函數名和當前本地命名空間的一個函數對象(由可執行代碼圍繞的一個包裝器)
3.該函數對象中包含一個對全局命名空間的一個引用,當該函數被調用時,該引用作爲全局命名空間來使用
4.一個函數定義可能被一個或多個裝飾器包裹,函數定義完成,其裝飾表達式在包含該函數的範圍內被評估,結果必須是可調用的,該調用以函數對象作爲唯一調用參數
5.調用返回值和函數名綁定,而不是函數對象
6.多個裝飾器在嵌套中應用
------------------------------------------------------------------------------------------
1.函數執行爲該函數本地變量引入一個新的符號表,更準確的說,函數中所有變量的賦值都是將值存儲在本地符號表
2.當引用該變量時,首先在本地(被調函數)符號表中查找,然後在上一層函數的本地符號表中查找,然後在全局符號表中查找,最後在python內置名稱表中查找
1.因此在函數內部,無法直接給全局變量直接賦值(第1條),但是可以引用該全局變量(第2條)
1.當一個函數被調用時,實參會被引入該函數的本地符號表;因此,參數是通過"值傳遞"的(該值是對象的引用,而不是該對象的值).當一個函數調用另一個函數,會爲該調用創建一個新的符號表
1.實際上在描述"值傳遞"時,描述爲對象引用更恰當
1.一個函數定義會在當前符號表中引入該函數名,函數名的值的類型是一個可以被解釋器識別爲用戶自定義類型的函數類型
2.函數名的值可以被賦值給其他名稱,該名稱和原來函數名稱等效,這是一個通用的命名規則
------------------------------------------------------------------------------------------
1.python中所有函數都有一個返回值
1.函數中有return
1.return後有表達式,則返回該表達式的結果
2.return後無表達式,返回None
2.函數中沒有return,當執行到函數尾,返回None
eg: >>> def fun():
... print("test")
...
>>> print(fun())
test
None
>>>