python基礎之函數對象,嵌套,名稱空間和做用域

函數對象:python

函數是第一類對象的含義是函數能夠被看成數據處理函數

函數可用於:對象

         def func():blog

                  print(‘func’)內存

         1.引用  f = func  把內存地址賦值給f作用域

         2.看成參數傳給一個函數    def foo(func)class

         3.看成函數的返回值    return func容器

         4.能夠看成容器類型的元素                 l =[func,1,2]變量

#函數嵌套的定義:
def f1():
    def f2():
        def f3():
            print('from f3')
        f3()
    f2()

f1()
#函數嵌套調用:
def max(x,y):
    return x if x > y else y

	def max4(a,b,c,d):
    	res1=max(a,b)
    	res2=max(res1,c)
   		res3=max(res2,d)
    	return res3
	print(max4(1,2,3,4))

  

名稱空間和做用域引用

1.名稱空間

         存放名字和值的綁定關係的地方  (存值的內存地址)

2.名稱空間的三大類

         ①內置名稱空間:存放python解釋器自帶的名字

                                   解釋器打開生效,關閉失效

         ②全局名稱空間:除了內置和局部的就是全局

                                   文件運行時生效,執行完畢失效

         ③局部名稱空間:用於存放函數調用期間函數體產生的名字

                                   文件執行中調用某個函數時生效,函數執行完失效

總結:三種名稱空間的加載順序:內置名稱空間-全局名稱空間-局部名稱空間

           名稱空間查找順序:基於當前位置,自下向上找

 

3.做用域

         做用域指的是區域、範圍,做用域即做用的範圍

         全局做用範圍:全局做用域(內置名稱空間和全局名稱空間)

                  全局有效,全局存活

         局部做用範圍:局部做用域(局部名稱空間)

                  局部有效,臨時存活

 

         做用域關係是在函數定義階段就固定死了,但凡調用函數都須要跑到定義階段判斷做用域關係

x = 1
def f1():
    print(x)
der f2():
    x = 11
    f1()
f2()

結果爲1

  

nonlocal  改局部,函數內往外找,沒有就報錯

global      改全局,沒有也不會報錯

在局部改全局可變類型,能夠直接改

在局部改全局不可變類型,須要聲明global,聲明爲全局的變量就能夠直接修改了

相關文章
相關標籤/搜索