精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

python變量的作用域

python爬蟲知識分享 ? 來源:python爬蟲知識分享 ? 作者:python爬蟲知識分享 ? 2022-03-03 16:50 ? 次閱讀

python變量的作用域

1. 作用域

Python的作用域可以分為四種:

L (Local) 局部作用域

E (Enclosing) 閉包函數外的函數中

G (Global) 全局作用域

B (Built-in) 內建作用域

變量/函數 的查找順序: L –> E –> G –>B

意思是,在局部找不到的,便去局部外的局部作用域找(例如 閉包),再找不到的就去全局作業域里找,再找不到就去內建作業域中找。

會影響 變量/函數 作用范圍的有

函數:def 或 lambda

類:class

關鍵字:global noglobal

文件:*py

推導式:[],{},()等,僅限Py3.x中,Py2.x會出現變量泄露。

1、賦值在前,引用在后

# ------同作用域內------
name = "MING"
print(name)

# ------不同作用域內------
name = "MING"
def main():
    print(name)

2、引用在前,賦值在后(同一作用域內)

print(name)
name = "MING"

# UnboundLocalError: local variable 'name' referenced before assignment

3、賦值在低層,引用在高層

# L -> E -> G -> B
# 從左到右,由低層到高層
def main():
    name = "MING"

print(name)
# NameError: name 'name' is not defined

2. 閉包

閉包這個概念很重要噢。你一定要掌握。

在一個外函數中定義了一個內函數,內函數里運用了外函數的臨時變量,并且外函數的返回值是內函數的引用。這樣就構成了一個閉包。其實裝飾函數,很多都是閉包。

好像并不難理解,為什么初學者會覺得閉包難以理解呢?

我解釋一下,你就明白了。

一般情況下,在我們認知當中,如果一個函數結束,函數的內部所有東西都會釋放掉,還給內存,局部變量都會消失。但是閉包是一種特殊情況,如果外函數在結束的時候發現有自己的臨時變量將來會在內部函數中用到,就把這個臨時變量綁定給了內部函數,然后自己再結束。

你可以看下面這段代碼,就構成了閉包。在內函數里可以引用外函數的變量。

def deco():
    name = "MING"
    def wrapper():
        print(name)
    return wrapper

deco()()
# 輸出:MING

3. 改變作用域

變量的作用域,與其定義(或賦值)的位置有關,但不是絕對相關。 因為我們可以在某種程度上去改變向上的作用范圍。

關鍵字:global 將 局部變量 變為全局變量

關鍵字:nonlocal 可以在閉包函數中,引用并使用閉包外部函數的變量(非全局的噢)

global好理解,這里只講下nonlocal。

先來看個例子

def deco():
    age = 10
    def wrapper():
        age += 1
    return wrapper

deco()()

運行一下,會報錯。

# UnboundLocalError: local variable 'age' referenced before assignment

但是這樣就OK

def deco():
    age = 10
    def wrapper():
        nonlocal age
        age += 1
    return wrapper

deco()()
# 輸出:11

其實,你如果不使用 +=-=等一類的操作,不加nonlocal也沒有關系。這就展示了閉包的特性。

def deco():
    age = 10
    def wrapper():
        print(age)
    return wrapper

deco()()
# 輸出:10

4. 變量集合

在Python中,有兩個內建函數,你可能用不到,但是需要掌握它們。

globals() :以dict的方式存儲所有全局變量

locals():以dict的方式存儲所有局部變量

globals()

def foo():
    print("I am a func")

def bar():
    foo="I am a string"
    foo_dup = globals().get("foo")
    foo_dup()

bar()
# 輸出
# I am a func

locals()

other = "test"

def foobar():
    name = "MING"
    gender = "male"
    for key,value in locals().items():
        print(key, "=", value)

foobar()
# 輸出
# name = MING
# gender = male

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • python
    +關注

    關注

    53

    文章

    4752

    瀏覽量

    84061
  • 作用域
    +關注

    關注

    0

    文章

    6

    瀏覽量

    6092
收藏 人收藏

    評論

    相關推薦

    CAN數據幀的各個及其作用

    CAN數據幀由多個組成,包括幀起始、仲裁、控制、數據和幀結束。每個都有其特定的作用
    的頭像 發表于 07-24 15:10 ?424次閱讀

    python環境變量的配置pip

    Python環境變量的配置和使用是每個Python開發者都需要了解和掌握的基本技能之一。在本文中,我們將詳細介紹如何正確配置Python環境變量
    的頭像 發表于 12-15 15:41 ?2092次閱讀

    如何在嵌入式C編碼中規范變量

    防止外部文件的非正常訪問。直接使用其他模塊的私有數據,將使模塊間的關系逐漸走向“剪不斷理還亂”的耦合狀態,這種情形是不允許的。 ◎ 避免局部變量與全局變量同名。 說明:盡管局部變量和全局變量
    的頭像 發表于 12-07 14:42 ?265次閱讀

    pycharm怎么配置python環境變量

    正確的 Python 環境變量是非常重要的,因為它會影響到項目的運行和依賴包的安裝。本文將詳細介紹如何在 PyCharm 中配置 Python 環境變量。 PyCharm 支持在全局和
    的頭像 發表于 11-29 14:56 ?2202次閱讀

    淺談符號IO和圖形IO

    符號IO組態 方法:把“符號IO”這個灰色塊狀拖拽到指定畫面位置,鼠標右鍵彈出對話框“屬性”后點擊“常規”找到過程“變量”后,連接變量。添加文本并創建文本名稱。
    的頭像 發表于 11-29 09:33 ?1361次閱讀
    淺談符號IO<b class='flag-5'>域</b>和圖形IO<b class='flag-5'>域</b>

    安裝python怎么添加到環境變量

    Python是一種簡單易學的腳本語言,廣泛應用于開發各種類型的應用程序。為了在Windows操作系統上使用Python的命令行工具,需要將Python添加到系統的環境變量中。本文將向您
    的頭像 發表于 11-23 16:40 ?2157次閱讀

    python變量命名規則

    Python是一種高級編程語言,廣泛應用于軟件開發、數據分析和科學計算等領域。在Python中,變量是用來存儲數據的容器,它們具有名稱以及與之關聯的值。然而,變量的命名并不是隨意的,而
    的頭像 發表于 11-23 15:44 ?1021次閱讀

    python用input賦值多個變量

    Python中,可以使用 input 函數從用戶那里獲取輸入,并將輸入賦值給變量。當用戶輸入多個值時,可以使用空格、逗號或其他分隔符將它們分開。下面將詳細介紹如何使用 input 函數賦值多個變量
    的頭像 發表于 11-23 15:37 ?2432次閱讀

    python循環創建變量并賦值

    循環是Python編程中非常重要的一個概念,它可以讓我們輕松地重復執行某些代碼塊,從而簡化編程過程并提高代碼的效率。在循環中,我們經常需要創建變量并賦值,這是非常常見的操作。接下來,我將詳盡地解釋在
    的頭像 發表于 11-23 14:51 ?1353次閱讀

    for循環里的變量是局部變量

    作用是重復執行一段代碼,循環變量則是在每次迭代中改變其值,以便控制循環的次數或迭代的范圍。循環變量作用通常被限制在循環的花括號內部,這
    的頭像 發表于 11-23 14:50 ?1834次閱讀

    Python怎樣存儲變量性能最優

    工作時我們經常會遇到需要臨時保存結果變量的場景,尤其是一些數據處理、模型開發的場景,加載處理速度是個很漫長的過程,于是經常會把這些變量儲存起來。 而儲存變量最常見、最普遍的方法是用pickle
    的頭像 發表于 10-30 15:33 ?302次閱讀
    <b class='flag-5'>Python</b>怎樣存儲<b class='flag-5'>變量</b>性能最優

    Python怎樣存儲變量性能最優

    工作時我們經常會遇到需要臨時保存結果變量的場景,尤其是一些數據處理、模型開發的場景,加載處理速度是個很漫長的過程,于是經常會把這些變量儲存起來。 而儲存變量最常見、最普遍的方法是用pickle
    的頭像 發表于 10-17 11:34 ?312次閱讀
    <b class='flag-5'>Python</b>怎樣存儲<b class='flag-5'>變量</b>性能最優

    MCU中局部變量作用是什么?

    MCU中局部變量作用是什么
    發表于 10-09 08:51

    MCU中怎么確定一個變量作用

    MCU中怎么確定一個變量作用
    發表于 10-09 06:46

    python中eval的用法和作用

    `eval()`函數的作用是將字符串作為Python表達式進行求值。它可以執行包括算術運算、邏輯運算、函數調用以及定義在當前命名空間中的變量等在內的各種表達式。使用`eval()`可以動態地執行代碼,并在代碼中使用
    的頭像 發表于 09-28 16:26 ?3535次閱讀