最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python名稱(chēng)空間與作用域

 更新時(shí)間:2022年04月13日 16:44:38   作者:JasonJi  
這篇文章主要介紹了Python名稱(chēng)空間與作用域,名稱(chēng)空間即存放名字與對(duì)象映射?綁定關(guān)系的地方,下文更多相關(guān)介紹需要的小伙伴可以參考一下

一 名稱(chēng)空間

名稱(chēng)空間即存放名字與對(duì)象映射/綁定關(guān)系的地方。對(duì)于x=3,Python會(huì)申請(qǐng)內(nèi)存空間存放對(duì)象3,然后將名字x與3的綁定關(guān)系存放于名稱(chēng)空間中,del x表示清除該綁定關(guān)系。

? 在程序執(zhí)行期間最多會(huì)存在三種名稱(chēng)空間

1.1 內(nèi)建名稱(chēng)空間

伴隨python解釋器的啟動(dòng)/關(guān)閉而產(chǎn)生/回收,因而是第一個(gè)被加載的名稱(chēng)空間,用來(lái)存放一些內(nèi)置的名字,比如內(nèi)建函數(shù)名

>>> max
<built-in function max> #built-in內(nèi)建

1.2 全局名稱(chēng)空間

伴隨python文件的開(kāi)始執(zhí)行/執(zhí)行完畢而產(chǎn)生/回收,是第二個(gè)被加載的名稱(chēng)空間,文件執(zhí)行過(guò)程中產(chǎn)生的名字都會(huì)存放于該名稱(chēng)空間中,如下名字

import sys #模塊名sys

x=1 #變量名x

if x == 1:
    y=2 #變量名y

def foo(x): #函數(shù)名foo
    y=1
    def bar():
        pass

Class Bar: #類(lèi)名Bar
	pass	

1.3 局部名稱(chēng)空間

伴隨函數(shù)的調(diào)用/結(jié)束而臨時(shí)產(chǎn)生/回收,函數(shù)的形參、函數(shù)內(nèi)定義的名字都會(huì)被存放于該名稱(chēng)空間中

def foo(x):
    y=3 #調(diào)用函數(shù)時(shí),才會(huì)執(zhí)行函數(shù)代碼,名字x和y都存放于該函數(shù)的局部名稱(chēng)空間中

名稱(chēng)空間的加載順序是:內(nèi)置名稱(chēng)空間->全局名稱(chēng)空間->局部名稱(chēng)空間,而查找一個(gè)名字,必須從三個(gè)名稱(chēng)空間之一找到,查找順序?yàn)椋壕植棵Q(chēng)空間->全局名稱(chēng)空間->內(nèi)置名稱(chēng)空間。

二 作用域

2.1 全局作用域與局部作用域

按照名字作用范圍的不同可以將三個(gè)名稱(chēng)空間劃分為兩個(gè)區(qū)域:

  • 全局作用域:位于全局名稱(chēng)空間、內(nèi)建名稱(chēng)空間中的名字屬于全局范圍,該范圍內(nèi)的名字全局存活(除非被刪除,否則在整個(gè)文件執(zhí)行過(guò)程中存活)、全局有效(在任意位置都可以使用);

  • 局部作用域:位于局部名稱(chēng)空間中的名字屬于局部范圍。該范圍內(nèi)的名字臨時(shí)存活(即在函數(shù)調(diào)用時(shí)臨時(shí)生成,函數(shù)調(diào)用結(jié)束后就釋放)、局部有效(只能在函數(shù)內(nèi)使用)。

2.2 作用域與名字查找的優(yōu)先級(jí)

? 在局部作用域查找名字時(shí),起始位置是局部作用域,所以先查找局部名稱(chēng)空間,沒(méi)有找到,再去全局作用域查找:先查找全局名稱(chēng)空間,沒(méi)有找到,再查找內(nèi)置名稱(chēng)空間,最后都沒(méi)有找到就會(huì)拋出異常

x=100 #全局作用域的名字x
def foo():
    x=300 #局部作用域的名字x
    print(x) #在局部找x
foo()#結(jié)果為300

在全局作用域查找名字時(shí),起始位置便是全局作用域,所以先查找全局名稱(chēng)空間,沒(méi)有找到,再查找內(nèi)置名稱(chēng)空間,最后都沒(méi)有找到就會(huì)拋出異常

x=100
def foo():
    x=300 #在函數(shù)調(diào)用時(shí)產(chǎn)生局部作用域的名字x
foo()
print(x) #在全局找x,結(jié)果為100

提示:可以調(diào)用內(nèi)建函數(shù)locals()和globals()來(lái)分別查看局部作用域和全局作用域的名字,查看的結(jié)果都是字典格式。在全局作用域查看到的locals()的結(jié)果等于globals()

Python支持函數(shù)的嵌套定義,在內(nèi)嵌的函數(shù)內(nèi)查找名字時(shí),會(huì)優(yōu)先查找自己局部作用域的名字,然后由內(nèi)而外一層層查找外部嵌套函數(shù)定義的作用域,沒(méi)有找到,則查找全局作用域

x=1
def outer():
    x=2
    def inner(): # 函數(shù)名inner屬于outer這一層作用域的名字
        x=3
        print('inner x:%s' %x)

    inner()
    print('outer x:%s' %x)

outer() 
#結(jié)果為
inner x:3
outer x:2

在函數(shù)內(nèi),無(wú)論嵌套多少層,都可以查看到全局作用域的名字,若要在函數(shù)內(nèi)修改全局名稱(chēng)空間中名字的值,當(dāng)值為不可變類(lèi)型時(shí),則需要用到global關(guān)鍵字

x=1
def foo():
    global x #聲明x為全局名稱(chēng)空間的名字
    x=2
foo()
print(x) #結(jié)果為2

當(dāng)實(shí)參的值為可變類(lèi)型時(shí),函數(shù)體內(nèi)對(duì)該值的修改將直接反應(yīng)到原值,

num_list=[1,2,3]
def foo(nums):
    nums.append(5)

foo(num_list)
print(num_list)
#結(jié)果為
[1, 2, 3, 5]

對(duì)于嵌套多層的函數(shù),使用nonlocal關(guān)鍵字可以將名字聲明為來(lái)自外部嵌套函數(shù)定義的作用域(非全局)

def  f1():
    x=2
    def f2():
        nonlocal x
        x=3
    f2() #調(diào)用f2(),修改f1作用域中名字x的值
    print(x) #在f1作用域查看x

f1()

#結(jié)果
3

nonlocal x會(huì)從當(dāng)前函數(shù)的外層函數(shù)開(kāi)始一層層去查找名字x,若是一直到最外層函數(shù)都找不到,則會(huì)拋出異常。

到此這篇關(guān)于Python名稱(chēng)空間與作用域的文章就介紹到這了,更多相關(guān)名稱(chēng)空間與作用域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python通用唯一標(biāo)識(shí)符uuid模塊使用案例

    Python通用唯一標(biāo)識(shí)符uuid模塊使用案例

    這篇文章主要介紹了Python通用唯一標(biāo)識(shí)符uuid模塊使用案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Python標(biāo)準(zhǔn)庫(kù)之zipfile和tarfile模塊的使用

    Python標(biāo)準(zhǔn)庫(kù)之zipfile和tarfile模塊的使用

    zipfile和tarfile是Python中常用的壓縮包模塊,本文將通過(guò)示例詳細(xì)講解一下這兩個(gè)模塊的使用方法,快跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Python解析pcap文件示例

    Python解析pcap文件示例

    這篇文章主要為大家介紹了Python解析pcap文件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Python Django2.0集成Celery4.1教程

    Python Django2.0集成Celery4.1教程

    今天小編就為大家分享一篇Python Django2.0集成Celery4.1教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Python調(diào)用pytdx的代碼示例

    Python調(diào)用pytdx的代碼示例

    本文主要介紹了Python調(diào)用pytdx的代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 對(duì)python中字典keys,values,items的使用詳解

    對(duì)python中字典keys,values,items的使用詳解

    今天小編就為大家分享一篇對(duì)python中字典keys,values,items的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • python標(biāo)準(zhǔn)庫(kù)sys和OS的函數(shù)使用方法與實(shí)例詳解

    python標(biāo)準(zhǔn)庫(kù)sys和OS的函數(shù)使用方法與實(shí)例詳解

    這篇文章主要介紹了python標(biāo)準(zhǔn)庫(kù)sys和OS的函數(shù)使用方法與實(shí)例詳解,需要的朋友可以參考下
    2020-02-02
  • Python使用BeautifulSoup庫(kù)解析HTML基本使用教程

    Python使用BeautifulSoup庫(kù)解析HTML基本使用教程

    這篇文章主要介紹了Python使用BeautifulSoup庫(kù)解析HTML基本使用教程,文中主要對(duì)其適合于制作爬蟲(chóng)方面的特性進(jìn)行了解析,需要的朋友可以參考下
    2016-03-03
  • 對(duì)numpy的array和python中自帶的list之間相互轉(zhuǎn)化詳解

    對(duì)numpy的array和python中自帶的list之間相互轉(zhuǎn)化詳解

    下面小編就為大家分享一篇對(duì)numpy的array和python中自帶的list之間相互轉(zhuǎn)化詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • python中waitKey實(shí)例用法講解

    python中waitKey實(shí)例用法講解

    在本篇文章里小編給大家整理了一篇關(guān)于python中waitKey實(shí)例用法講解,有興趣的朋友們可以參考學(xué)習(xí)下。
    2021-04-04

最新評(píng)論

云浮市| 鸡西市| 秭归县| 霍林郭勒市| 山阴县| 浦东新区| 濮阳县| 宜宾市| 蛟河市| 绥滨县| 铜梁县| 青海省| 静安区| 葵青区| 克什克腾旗| 富顺县| 米泉市| 泰和县| 凉城县| 德庆县| 靖远县| 平邑县| 白玉县| 高碑店市| 安顺市| 应用必备| 临桂县| 西林县| 巴南区| 巴楚县| 深州市| 林西县| 察哈| 云阳县| 蓝山县| 谢通门县| 墨玉县| 东辽县| 清苑县| 丰原市| 庐江县|