91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

python變量的作用域

python爬蟲知識(shí)分享 ? 來源:python爬蟲知識(shí)分享 ? 作者:python爬蟲知識(shí)分享 ? 2022-03-03 16:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

python變量的作用域

1. 作用域

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

L (Local) 局部作用域

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

G (Global) 全局作用域

B (Built-in) 內(nèi)建作用域

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

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

會(huì)影響 變量/函數(shù) 作用范圍的有

函數(shù):def 或 lambda

類:class

關(guān)鍵字:global noglobal

文件:*py

推導(dǎo)式:[],{},()等,僅限Py3.x中,Py2.x會(huì)出現(xiàn)變量泄露。

1、賦值在前,引用在后

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

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

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

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. 閉包

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

在一個(gè)外函數(shù)中定義了一個(gè)內(nèi)函數(shù),內(nèi)函數(shù)里運(yùn)用了外函數(shù)的臨時(shí)變量,并且外函數(shù)的返回值是內(nèi)函數(shù)的引用。這樣就構(gòu)成了一個(gè)閉包。其實(shí)裝飾函數(shù),很多都是閉包。

好像并不難理解,為什么初學(xué)者會(huì)覺得閉包難以理解呢?

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

一般情況下,在我們認(rèn)知當(dāng)中,如果一個(gè)函數(shù)結(jié)束,函數(shù)的內(nèi)部所有東西都會(huì)釋放掉,還給內(nèi)存,局部變量都會(huì)消失。但是閉包是一種特殊情況,如果外函數(shù)在結(jié)束的時(shí)候發(fā)現(xiàn)有自己的臨時(shí)變量將來會(huì)在內(nèi)部函數(shù)中用到,就把這個(gè)臨時(shí)變量綁定給了內(nèi)部函數(shù),然后自己再結(jié)束。

你可以看下面這段代碼,就構(gòu)成了閉包。在內(nèi)函數(shù)里可以引用外函數(shù)的變量。

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

deco()()
# 輸出:MING

3. 改變作用域

變量的作用域,與其定義(或賦值)的位置有關(guān),但不是絕對(duì)相關(guān)。 因?yàn)槲覀兛梢栽谀撤N程度上去改變向上的作用范圍。

關(guān)鍵字:global 將 局部變量 變?yōu)槿肿兞?/p>

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

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

先來看個(gè)例子

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

deco()()

運(yùn)行一下,會(huì)報(bào)錯(cuò)。

# UnboundLocalError: local variable 'age' referenced before assignment

但是這樣就OK

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

deco()()
# 輸出:11

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

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

deco()()
# 輸出:10

4. 變量集合

在Python中,有兩個(gè)內(nèi)建函數(shù),你可能用不到,但是需要掌握它們。

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

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

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

審核編輯:符乾江
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4876

    瀏覽量

    90029
  • 作用域
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    6274
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    面試必看!排隊(duì)自旋鎖32位變量劃分與核心作用

    核心數(shù)據(jù)結(jié)構(gòu)的含義模糊不清,導(dǎo)致面試時(shí)錯(cuò)失高分。今天這篇文章,我們就從面試視角拆解 32 位變量劃分、各作用,再結(jié)合流程圖理清工作機(jī)
    的頭像 發(fā)表于 02-09 16:54 ?806次閱讀
    面試必看!排隊(duì)自旋鎖32位<b class='flag-5'>變量</b>的<b class='flag-5'>域</b>劃分與核心<b class='flag-5'>作用</b>

    “明牌”對(duì)局,自變量開源模型超越pi0

    “明牌”對(duì)局,自變量開源模型超越pi0
    的頭像 發(fā)表于 01-10 12:00 ?5586次閱讀
    “明牌”對(duì)局,自<b class='flag-5'>變量</b>開源模型超越pi0

    什么是位

    節(jié)的二進(jìn)制位來表示。一、位的定義和位變量的說明位定義與結(jié)構(gòu)定義相仿,其形式為: struct 位
    發(fā)表于 12-15 08:07

    沒有專利的opencv-python 版本

    所有 官方發(fā)布的 opencv-python 核心版本(無 contrib 擴(kuò)展)都無專利風(fēng)險(xiǎn)——專利問題僅存在于 opencv-contrib-python 擴(kuò)展模塊中的少數(shù)算法(如早期 SIFT
    發(fā)表于 12-13 12:37

    第7章 變量進(jìn)階與點(diǎn)陣LED(7.1 7.2)

    知識(shí)——變量作用和存儲(chǔ)類別。 7.1變量作用 所謂的
    的頭像 發(fā)表于 12-10 16:25 ?353次閱讀

    解讀

    使用廣泛。 對(duì)于這樣的設(shè)備,通常內(nèi)存只有256B,那么能夠給我們利用的資源就十分珍貴了。在這種情況下,如果我們只需要定義一個(gè)變量來存放布爾值,一般就申請(qǐng)一個(gè)整型變量,通過1和0來間接存儲(chǔ)。但是,顯然1和0
    發(fā)表于 12-05 06:45

    常用變量的介紹

    extern:用在全局變量上表示該變量在其他文件中已經(jīng)定義;用在函數(shù)上作用同全局變量; static:用在全局變量上,和非靜態(tài)全局
    發(fā)表于 11-21 07:05

    PLC中Static和Temp變量的區(qū)別

    大家好,收到粉絲投稿,讓博主講下Static變量和Temp變量的區(qū)別,新入行的兄弟可能會(huì)對(duì)這兩個(gè)概念不太能理解。
    的頭像 發(fā)表于 09-24 14:51 ?1400次閱讀
    PLC中Static和Temp<b class='flag-5'>變量</b>的區(qū)別

    termux如何搭建python游戲

    termux如何搭建python游戲 Termux搭建Python游戲開發(fā)環(huán)境的完整指南 一、Termux基礎(chǔ)環(huán)境準(zhǔn)備 Termux是一款無需root即可在安卓設(shè)備上運(yùn)行的Linux終端
    發(fā)表于 08-29 07:06

    如何在嵌入式RF測(cè)試中實(shí)施多信號(hào)分析

    射頻(RF)測(cè)試是嵌入式系統(tǒng)開發(fā)與驗(yàn)證中的關(guān)鍵環(huán)節(jié),尤其是在電信、航空航天、汽車以及物聯(lián)網(wǎng)等行業(yè)。隨著嵌入式系統(tǒng)的日益復(fù)雜,傳統(tǒng)RF測(cè)試方法往往難以捕捉多個(gè)(時(shí)間、頻率、數(shù)字)信號(hào)之間的復(fù)雜相互作用。多
    的頭像 發(fā)表于 08-15 16:32 ?2871次閱讀
    如何在嵌入式RF測(cè)試中實(shí)施多<b class='flag-5'>域</b>信號(hào)分析

    python app不能運(yùn)行怎么解決?

    ;python_agent[1241]: xmlrpc request method supervisor.stopProcess failed;python_agent[1241]: xmlrpc request method supervisor.stopProces
    發(fā)表于 08-06 06:27

    基礎(chǔ)篇3:掌握Python中的條件語(yǔ)句與循環(huán)

    Python編程語(yǔ)言中,條件語(yǔ)句和循環(huán)是構(gòu)成復(fù)雜邏輯和數(shù)據(jù)處理的基石。本篇基礎(chǔ)教程將幫助您深入了解Python中的條件語(yǔ)句和循環(huán)結(jié)構(gòu),讓您能夠更好地控制程序流程。 條件語(yǔ)句 條件語(yǔ)句允許程序根據(jù)
    發(fā)表于 07-03 16:13

    RISC-V核低功耗MCU多電壓設(shè)計(jì)

    RISC-V核低功耗MCU的多電壓設(shè)計(jì)是一種通過優(yōu)化電源管理來降低功耗的技術(shù),RISC-V核低功耗MCU的多電壓設(shè)計(jì)通過電源劃分、電壓轉(zhuǎn)換、時(shí)序管理等技術(shù),顯著降低了功耗,同時(shí)提升了能效
    的頭像 發(fā)表于 04-27 16:06 ?1081次閱讀

    Ansible Playbook中的變量使用技巧

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

    零基礎(chǔ)入門:如何在樹莓派上編寫和運(yùn)行Python程序?

    在這篇文章中,我將為你簡(jiǎn)要介紹Python程序是什么、Python程序可以用來做什么,以及如何在RaspberryPi上編寫和運(yùn)行一個(gè)簡(jiǎn)單的Python程序。什么是Python程序?
    的頭像 發(fā)表于 03-25 09:27 ?2033次閱讀
    零基礎(chǔ)入門:如何在樹莓派上編寫和運(yùn)行<b class='flag-5'>Python</b>程序?