<pre id="lrjz7"></pre>
      <sub id="lrjz7"></sub>

    <span id="lrjz7"></span>

    <em id="lrjz7"><ins id="lrjz7"><cite id="lrjz7"></cite></ins></em>

    <big id="lrjz7"></big>

    <em id="lrjz7"></em><track id="lrjz7"><nobr id="lrjz7"></nobr></track>

      <em id="lrjz7"><output id="lrjz7"><mark id="lrjz7"></mark></output></em>

        <span id="lrjz7"></span><span id="lrjz7"><delect id="lrjz7"><ins id="lrjz7"></ins></delect></span>
        更多課程 選擇中心

        Python培訓
        達內IT學院

        400-111-8989

        Python變量名與作用域的坑

        • 發布:Python培訓
        • 來源:Python練習題庫
        • 時間:2017-09-19 17:36

        不管你是正準備學習Python的小白,還是剛入門的菜鳥,亦或是經驗豐富的大牛,你們學習一門語言的第一步都是一樣的,那就是——基礎知識。但是很多人可能在學習的過程中忽略了基礎知識的重要性。今天,我們就來為大家分享一個由于基礎知識不扎實而誤入的坑。

        一位有多年Python使用經驗者的分享

        使用python有些年頭了,自認為對Python的基本知識很了解了,某天發生的一件事讓我對Python有了更多的認識。

        某一天小伙伴讓我幫忙看以下一段代碼,具體內容和函數名字可以不用太過在意,命名上做了一些特殊處理,但是不影響代碼邏輯和要表達的意思。

        for循環中當node_type為fb時,將FBX對象返回并作為全局變量dut(node_name的內容是字符串dut),接下來print dut,報錯。

        錯誤信息如下:


        小伙伴提到,如果將with cli_ctx as dut這個block刪除掉,代碼執行正常。聽到這里,我的第一反應是變量作用域的問題,但是也無法道出其中原委,于是建議我的小伙伴,將context manager那一段代碼改成with cli_ctx as d,重新嘗試一下是否有問題,同時我在網上繼續搜索相關的原因,之后由結果和理論結合分析問題的原因。

        幸運的是,代碼修改以后,執行正常,我也找到了一些文章來解釋這個問題,我的第一感覺也沒有錯,的確是變量作用域的問題,代碼在執行過程中,print dut實際上是在訪問Local variable,而不是我們期望的global variable dut。

        參考 Python 的官方文檔和搜索到的資料,總結出具體原因如下:

        當搜索一個變量的時候,先從局部作用域開始搜索,如果在局部作用域沒有找到那個變量,就會在全局變量中找這個變量,如果找不到拋出異常Unbound-LocalError。

        如果內部函數有引用外部函數的同名變量或者全局變量,并且對這個變量有修改,那么 python 會認為它是一個局部變量。因為對變量的定義在代碼塊以外,當前代碼塊中沒有變量的定義和賦值,所以報錯。

        在我們的代碼中,全局變量 dut 雖然創建了,但是由于在函數代碼塊中,下文中有 context manager cli_ctx對變量dut進行了賦值操作,導致在函數block中,dut成為了局部變量,而非全局變量。

        對變量賦值的操作“=”是很明顯的語句,其他不是那么明顯的賦值操作有:for循環中的賦值,except語句中的賦值,with...as...{var}中的var。

        總結:避免誤入一些不必要的坑,基礎知識一定要學扎實!


        預約申請免費試聽課

        填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

        上一篇:Python基礎篇:一個小時搭建一個全棧 Web 應用框架
        下一篇:搭建python數據分析平臺教程

        2021年Python面試題及答案匯總詳解

        python數據分析,你需要這些工具

        Python培訓講解二叉樹的三種深度

        Python培訓:如何實現窮舉搜索?

        • 關注微信公眾號

          回復關鍵字:視頻資料

          免費領取 達內課程視頻學習資料

        • 視頻學習QQ群

          添加QQ群:1143617948

          免費領取達內課程視頻學習資料

        Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

        選擇城市和中心
        黑龍江省

        吉林省

        河北省

        湖南省

        貴州省

        云南省

        廣西省

        海南省

        4438全国大成网人网站,亚洲 图 色 欧美 另类 小说,国产精品 欧美在线 另类小说,欧美日韩中文国产一区