函數進階
阿新 • • 發佈:2017-07-26
文件的 hid 作用 分享 位置 bsp 函數 class 如果
三元運算符
結果+ if + 條件 + else + 結果
一、命名空間和作用域
命名空間的本質:存放著名字與值的綁定關系
命名空間一共分為三種:
全局命名空間
局部命名空間
內置命名空間
三種命名空間之間的加載與取值順序:(命名空間和作用域是分不開的)
加載順序:內置命名空間(程序運行前加載)->全局命名空間(程序運行中:從上到下加載)->局部命名空間(程序運行中:調用時才加載)
取值:
在局部調用:局部命名空間->全局命名空間->內置命名空間
在全局調用:全局命名空間->內置命名空間
作用域:
為什麽要有作用域的概念:
為了函數內的變量不會影響到全局
作用域就是作用範圍,按照生效範圍可以分為全局作用域和局部作用域
全局作用域:包含內置名稱空間,全局名稱空間,在整個文件的任意位置都能被引用,全局有效
局部作用域:局部名稱空間,只能在局部 範圍內生效
站在全局看:使用名字:
如果全局有用全局的:如果全局沒有用內置的
二、函數嵌套與作用域鏈
函數的嵌套調用:
1 def max2(x,y): 2 m = x if x>y else y 3 return m 4 5 def max4(a,b,c,d): 6 res1 = max2(a,b) 7 res2 = max2(res1,c)View Code8 res3 = max2(res2,d) 9 return res3 10 11 # max4(23,-7,31,11) 12 13 函數的嵌套調用
嵌套定義:定義在內部的函數無法直接在全局被調用
為了保護內部函數,確定內部函數只能在外部函數中被調用
1 def animal(): 2 def tiger(): 3 print(‘bark‘) 4 print(‘eat‘) 5 tiger() 6 animal()View Code
函數的作用域鏈:
三、函數名的本質
函數名的本質就是函數的內存地址
1、可以被引用;2、可以被當做容器類型的元素;3、可以當做函數的參數和返回值(可以當做普通變量使用)
四、閉包
內部函數包含對外部作用域而非全局作用域名字的引用。(函數對上層作用域名字的引用)
def func(): name = ‘eva‘ def inner(): print(name)
思維導圖:
函數進階