<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python中的global關(guān)鍵字,你了解嗎?

          共 1514字,需瀏覽 4分鐘

           ·

          2020-02-05 23:21

          咪哥雜談


          ef6eea9b93367bf1ae757af858c0db5e.webp

          本篇閱讀時(shí)間約為 6 分鐘。


          1

          前言


          相信經(jīng)歷過(guò)這個(gè)春節(jié)的90后們,都會(huì)記憶深刻。就像網(wǎng)上看到的段子一樣,給你一臺(tái)電腦,給你吃喝,讓你不出門,你能待多久?

          985b198a1d635e639133d3c7fd3ecbb4.webp


          疫情開(kāi)始的時(shí)候,年輕人重視,家長(zhǎng)不重視,現(xiàn)在反而反過(guò)來(lái)了,每天過(guò)多的疫情信息反而倒不讓我那么關(guān)注了。
          現(xiàn)在到了收心的時(shí)候了,面對(duì)這樣的“黑天鵝事件”,我們應(yīng)該更多的把注意力放在提升于自身上,而非疫情資訊。
          那么廢話不多說(shuō),今天來(lái)了解下 Python 中的 global 關(guān)鍵字。

          2

          Python變量的作用域


          實(shí)戰(zhàn)案例演示之前,先要了解下 Python 的作用域。

          曾經(jīng)在閉包的文章 《python小課堂26 - 進(jìn)階必修之閉包(一)》中,我寫過(guò)一段關(guān)于作用域的介紹,復(fù)制下:
          Python變量的作用域一共有4種,分別是:
          • L (Local) 局部作用域
          • E (Enclosing) 閉包函數(shù)外的函數(shù)中
          • G (Global) 全局作用域
          • B (Built-in) 內(nèi)建作用域
          以 L –> E –> G –>B 的規(guī)則查找,即:在局部找不到,便會(huì)去局部外的局部找(例如閉包),再找不到就會(huì)去全局找,再者去內(nèi)建中找。
          看完概念,接下來(lái)看看實(shí)例,
          請(qǐng)自行思考后再看答案

          bcb13e1d4cbc98b8ac0b0e558136d7cf.webp

          672f6c79033ee2d25f0f62bb719901f0.webp

          78ed8ab706f079b4bf17b97dd4252a21.webp

          4144d64a59cafb0a44036c2f7badc448.webp

          結(jié)論:
          實(shí)例一:

          即使變量同名,優(yōu)先引用的是局部變量。


          實(shí)例二 &?實(shí)例三:

          閉包的情況,如果內(nèi)部函數(shù)沒(méi)有局部變量,則會(huì)優(yōu)先引用閉包的環(huán)境變量。


          實(shí)例四:

          引用全局變量。

          3

          global關(guān)鍵字


          先來(lái)解釋下,Global 中文含義:全球的,全面的。
          global warming:全球變暖。39d755fb2388edab11e5323eadd0b22e.webp
          上面的作用域四個(gè)案例如果看明白了,那我們繼續(xù)。

          如果現(xiàn)在有個(gè)問(wèn)題是這樣的:
          有個(gè)變量 x=5 ,現(xiàn)需要讓多個(gè)函數(shù)共享并且在函數(shù)內(nèi)引用它,請(qǐng)用代碼實(shí)現(xiàn)下。
          有的小伙伴可能已經(jīng)想到,這題的答案不就是上面的實(shí)例四嗎?
          在 func_a 和 func_b 函數(shù)中,你們看到外面的 x = 5 已經(jīng)作為全局變量在這兩個(gè)函數(shù)中分別成功打印。
          4144d64a59cafb0a44036c2f7badc448.webp
          對(duì)于全局變量來(lái)說(shuō),既然能函數(shù)體內(nèi)直接引用,并且程序沒(méi)有報(bào)錯(cuò),那為什么還要用 global 關(guān)鍵字?
          別急,繼續(xù)往下看。
          現(xiàn)在在重新聲明一個(gè) func_c 函數(shù),并且對(duì)這個(gè) x 進(jìn)行加 1 的操作。你覺(jué)得會(huì)打印什么結(jié)果?

          7de42396fc1e395db4693e9ffcb30cf5.webp

          可以看到已經(jīng)報(bào)錯(cuò)了?,UnboundLocalError,錯(cuò)誤代碼第 9 行 x = x+1。
          在這個(gè)例子中設(shè)置的 x=5 屬于全局變量,而在函數(shù)內(nèi)部中沒(méi)有對(duì) x 的定義。
          根據(jù) Python 訪問(wèn)局部變量和全局變量的規(guī)則:當(dāng)搜索一個(gè)變量的時(shí)候,Python 先從局部作用域開(kāi)始搜索,如果在局部作用域沒(méi)有找到那個(gè)變量,那樣 Python 就會(huì)像上面的案例中介紹的作用域范圍逐層尋找。
          最終在全局變量中找這個(gè)變量,如果找不到則拋出 ?UnboundLocalError 異常。
          但你會(huì)想,明明已經(jīng)在全局變量中找到同名變量了,怎么還是報(bào)錯(cuò)?
          因?yàn)閮?nèi)部函數(shù)有引用外部函數(shù)的同名變量或者全局變量,并且對(duì)這個(gè)變量有修改的時(shí)候,此時(shí) Python 會(huì)認(rèn)為它是一個(gè)局部變量,而函數(shù)中并沒(méi)有 x 的定義和賦值,所以報(bào)錯(cuò)。





          global 關(guān)鍵字為解決此問(wèn)題而生,在函數(shù) func_c中,顯示地告訴解釋器 x 為全局變量,然后會(huì)在函數(shù)外面尋找 x 的定義,執(zhí)行完 x = x + 1 后,x 依然是全局變量。

          f5419d301181e41c958ecdd1721504fe.webp

          4

          結(jié)語(yǔ)


          好了,這就是本期的內(nèi)容,關(guān)于 global 的相關(guān)內(nèi)容,搞明白作用域,弄清同名變量賦值時(shí)的機(jī)制,在未來(lái)的編程道路中就不會(huì)出錯(cuò)啦。


          13758ac0f917b5d293006ab0f5bec47b.webp


          如果你有什么想說(shuō)的,不懂得,歡迎評(píng)論區(qū)留言!~




          ▼往期精彩回顧▼網(wǎng)易云音樂(lè)源碼分享新手必會(huì),python中的debug調(diào)試一份王者榮耀的英雄數(shù)據(jù)報(bào)告



          e79ad9f62f7cd51da633f3fd08d1ee12.webp你點(diǎn)的每個(gè)在看,我都認(rèn)真當(dāng)成了喜歡


          瀏覽 64
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久久666| 国产青青草 | 国产成人精品免费 | 人妻a| 天天爽夜夜爽精品成人免费 |