在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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
    +關注

    關注

    56

    文章

    4821

    瀏覽量

    85776
  • 作用域
    +關注

    關注

    0

    文章

    6

    瀏覽量

    6194
收藏 人收藏

    評論

    相關推薦

    Ansible Playbook中的變量使用技巧

    在inventory中定義的連接變量(比如ansible_ssh_user);優先級第二。
    的頭像 發表于 04-15 10:26 ?116次閱讀

    混合示波器的原理和應用

    的原理和功能,在電子測量領域發揮著重要作用。隨著無線通信、物聯網等新興應用的不斷發展,混合示波器的應用前景將更加廣闊。
    發表于 12-27 15:54

    快速理解工業交換機中的沖突與廣播

    工業交換機是工業通信網絡的重要組成部分,其高效的數據傳輸功能對生產和管理起著關鍵作用。沖突與廣播是工業網絡中的兩個重要概念。它們在網絡設計與優化中扮演著不同的角色。本文將以簡明易懂的方式介紹這兩個概念,并探討它們在工業交換機
    的頭像 發表于 11-20 16:51 ?979次閱讀
    快速理解工業交換機中的沖突<b class='flag-5'>域</b>與廣播<b class='flag-5'>域</b>

    對比Python與Java編程語言

    使得編寫代碼更加靈活,但也可能導致運行時錯誤。 Java 語法相對冗長,需要顯式聲明變量類型,增加了代碼的可讀性和安全性。 靜態類型系統在編譯時進行類型檢查,減少了運行時錯誤。 二、性能 Python 解釋型語言,運行速度通常比Java慢,但對于許多應用場景
    的頭像 發表于 11-15 09:31 ?780次閱讀

    圖紙模板中的文本變量

    “ ?文本變量和系統自帶的內置變量,可以幫助工程師靈活、高效地配置標題欄中的信息,而不用擔心模板中的文字對象被意外修改。 ? ” 文本變量的語法 文本變量以?${VARIABLENAM
    的頭像 發表于 11-13 18:21 ?446次閱讀
    圖紙模板中的文本<b class='flag-5'>變量</b>

    如何在文本字段中使用上標、下標及變量

    在KiCad的任何文本字段中,都可以通過以下的方式實現上標、下標、上劃線以及顯示變量及字段值的描述: 文本變量“文本變量”可以在 原理圖設置->工程->文本變量 中設置。下圖中設置了一
    的頭像 發表于 11-12 12:23 ?419次閱讀
    如何在文本字段中使用上標、下標及<b class='flag-5'>變量</b>

    Linux環境變量配置方法

    Linux上環境變量配置分為設置永久變量和臨時變量兩種。環境變量設置方法同時要考慮環境Shell類型,不同類型的SHELL設置臨時變量方法和
    的頭像 發表于 10-23 13:39 ?457次閱讀

    使用Python搭建簡易本地http服務器,升級WIPI模組

    01 下載python https://www.python.org/downloads/ 02 安裝python 安裝時候選擇把path加入電腦環境變量 3 由于
    的頭像 發表于 09-29 15:38 ?1112次閱讀
    使用<b class='flag-5'>Python</b>搭建簡易本地http服務器,升級WIPI模組

    如何幫助孩子高效學習Python:開源硬件實踐是最優選擇

    家長們常常擔心孩子在學習Python時所面臨的挑戰,如復雜性、興趣保持、學習進度和可用資源。對于希望有效教授孩子Python的家長而言,了解硬件的作用至關重要,因為結合硬件項目的Python
    的頭像 發表于 09-06 09:49 ?494次閱讀

    鴻蒙原生應用元服務開發-倉頡基本概念程序結構

    。此外,如果需要獲取程序啟動時的命令行參數,可以聲明和使用 Array 類型參數。 例如在以下程序中,我們在頂層作用定義了全局變量 a 和全局函數 b,還有自定義類型 C、D 和 E,以及作為程序入口
    發表于 08-13 10:57

    pytorch和python的關系是什么

    在當今的人工智能領域,Python已經成為了最受歡迎的編程語言之一。Python的易學易用、豐富的庫和框架以及強大的社區支持,使其成為了數據科學、機器學習和深度學習等領域的首選語言。而在深度學習領域
    的頭像 發表于 08-01 15:27 ?2917次閱讀

    can數據幀有哪幾個組成

    CAN總線上傳輸數據的格式。一個典型的CAN數據幀由多個組成,包括幀起始、仲裁、控制、數據、CRC和幀結束。每個
    的頭像 發表于 07-24 15:14 ?1556次閱讀

    CAN數據幀的各個及其作用

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

    ubuntu下(python ver 2.7.6)運行python demo_server.py后無反應怎么解決?

    to device, then start mesh demo. 第一步中 Run demo_server.py on the computer 請問此demo_server.py作用? 另外,ubuntu下
    發表于 07-22 08:20

    Win10 vscode中無法編譯,提示python.exe: command not found怎么解決?

    電腦中已經刪除之前安裝的python,環境變量也添加了報錯內容中要求的python路徑,我用git bash、cmd也是可以打開python的,證明環境
    發表于 06-07 06:42
    主站蜘蛛池模板: 辣h高h肉h激h超h | 四虎在线观看免费永久 | 夜夜爱夜夜爽夜夜做夜夜欢 | 她也啪97在线视频 | 男人天堂网在线视频 | 天天做天天爱夜夜爽毛片毛片 | 亚洲乱强 | 亚洲人成综合网站在线 | 无人区理论片手机看片 | 国语自产拍在线观看7m | 国产乱理论片在线观看理论 | 五月婷婷一区 | 加勒比视频网站 | 黄色大片在线免费观看 | bt天堂电影 | 免费视频观看 | 四虎看黄 | 欧美一级www片免费观看 | 老师解胸罩喂我吃奶 | 男女爱爱是免费看 | 亚洲一区二区中文字5566 | 日日夜操 | 一日本道加勒比高清一二三 | 欧美午夜性刺激在线观看免费 | 天天狠狠弄夜夜狠狠躁·太爽了 | 欧美极品另类xxx | 在线观看一二三区 | 欧美一级黄色片在线观看 | 韩国十八禁毛片无遮挡 | 韩国三级hd中文字幕好大 | 高清一本之道加勒比在线 | 欧美日韩国产在线一区 | 色播五月激情五月 | 麒麟色欧美影院在线播放 | 六月婷婷在线视频 | 欧美亚洲综合一区 | 欧美乱码视频 | 韩国韩宝贝2020vip福利视频 | ts人妖国产一区 | 激情在线播放免费视频高清 | 欧美性猛交xxxx乱大交 |