Python(12)——變量作用域及閉包操作


變量的作用域


變量的作用域就是指變量的有效范圍。

變量按照作用范圍分為兩類,分別是 全局變量 和 局部變量

全局變量:在函數外部聲明的變量就是全局變量

有效范圍:
    全局變量在函數外部可以正常使用。
    全局變量在函數內部也可以正常使用(需要用global聲明)

局部變量:在函數內部聲明的變量就是局部變量

有效范圍:
    局部變量在函數內部可以正常使用
    局部變量在函數外部不可以訪問

global關鍵字


global的作用就是把局部變量提升為全局變量

格式:

def 函數名():
    global 變量名
    函數功能代碼..

示例:

def funName():
    global name #如果不使用global關鍵字,外部是無法訪問變量name的。
    name = 'dragon'

funName()  #調用

print(name)  #嘗試訪問內部函數

'''注釋:
global只有在函數內部對變量進行全局聲明,該變量才是一個完整的全局變量(在函數外部可以對該變量進行任意操作)。
'''

內部函數


在函數內部聲明的函數就是內部函數。

格式:

def 函數名():
    局部變量...
    def 內部函數名():
        Python功能代碼...

示例:

def funName():
    name = 'dragon'
    #定義一個內部函數
    def inner():
        print('我是內部函數')

'''注釋:
    1.內部函數的本質就是局部變量(函數就是一個變量)
    2.內部函數在函數外部不可以直接調用
    3.內部函數在函數內部調用(當然,必須要定義內部函數之后才能調用)
'''

 

閉包


使用特定或特殊的方式,將局部變量(內部函數)引入到全局環境中使用,這就是閉包操作。

閉包方法1:

def 函數名():
    局部變量...
    def 內部函數名():
        pass
    return (局部變量,內部函數...)

閉包方法2:

def 函數名():
    局部變量
    def 內部函數名():
        pass
    #獲取所有需要進行閉包操作的函數和變量
    defall():
        return(局部變量,內部函數...)
    return all

 

閉包的優缺點:

優點:
    1.可以方便的進行函數式編程,組織程序代碼
    2.使內部函數和局部變量在外部可以訪問

缺點:
    1.閉包操作會導致整個函數的內部環境,被長久保存,占用大量內存。

閉包環境查看:__closure__

用於查詢當前閉包操作所使用的環境中的變量和內部函數等信息。

nonlocal

nonlocal關鍵字的意義,不是局部變量,當然他也不是全局變量,通常用於內部函數中使用外部函數的局部變量。

#聲明一個外部函數
def outer():
    #聲明一個變量(肯定不是全局變量)
    x = 5
    #聲明一個內部函數
    def inner():
        nonlocal x  #聲明x不是局部變量
        x += 9
        print(x)
    #調用函數
    inner()
#調用outer
outer()

'''注釋:
如果內部函數想使用全局變量,那么應該使用global聲明變量
(函數最外層的全局變量)
如果內部函數使用的是外部函數的局部變量,那么應該使用nonlocal聲明
(內部函數的外層,外部函數的局部變量)
'''

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM