1. 程式人生 > >函數進階

函數進階

文件的 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)
8 res3 = max2(res2,d) 9 return res3 10 11 # max4(23,-7,31,11) 12 13 函數的嵌套調用
View Code

嵌套定義:定義在內部的函數無法直接在全局被調用

為了保護內部函數,確定內部函數只能在外部函數中被調用

技術分享
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)

思維導圖:

技術分享

函數進階