亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

【大坑記】Python中的全局變量變成了局部變量

DobbyKim / 978人閱讀

摘要:后來好奇自己寫了個小程序測驗同樣報了錯誤于是猜出了,在定義這個函數(shù)的時候,我們在函數(shù)內(nèi)存在給全局變量賦值的操作,它就默認(rèn)把函數(shù)內(nèi)的變成了本地變量。

上線前忙忙乎乎寫代碼,更新了一個同事的代碼,發(fā)現(xiàn)日志模塊報錯了

偽代碼如下:

from flask import current_app

def add_log(data, app=None):
    if app:
        current_app = app
    current_app.game_logger.info(data)

add_log(data)

錯誤代碼:

UnboundLocalError: local variable "current_app" referenced before assignment

因為確認(rèn)在flask的app上下文中,而且沒有傳app參數(shù)進去,所以光看代碼邏輯,一直很奇怪為啥會報current_app不存在的錯誤。

后來好奇自己寫了個小程序測驗

g = 10

def test(a=None):
    if a:
        g = a
    print g

test()

同樣報了UnboundLocalError錯誤

local variable "g" referenced before assignment

于是猜出了,在定義這個函數(shù)的時候,我們在函數(shù)內(nèi)存在給全局變量 g 賦值的操作,它就默認(rèn)把函數(shù)內(nèi)的 g 變成了本地變量。(即便這條賦值語句并沒有被執(zhí)行)

所以解決方法是,就是很簡單的加個 global 申明全局變量

修改后的代碼

g = 10

def test(a=None):
    global g
    if a:
        g = a
    print g

test()

輸出正常了- -

誒,說到底就是基礎(chǔ)不夠扎實啊╮(╯_╰)╭

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/37824.html

相關(guān)文章

  • Python變量命名與作用域的坑

    摘要:循環(huán)中當(dāng)為時,將對象返回并作為全局變量的內(nèi)容是字符串,接下來,報錯。幸運的是,代碼修改以后,執(zhí)行正常,我也找到了一些文章來解釋這個問題,我的第一感覺也沒有錯,的確是變量作用域的問題,代碼在執(zhí)行過程中,實際上是在訪問,而不是我們期望的。 使用python有些年頭了,自認(rèn)為對Python的基本知識很了解了,今天發(fā)生的一件事讓我對Python有了更多的認(rèn)識,寫成文章做個記錄。 同事讓我?guī)兔?..

    amuqiao 評論0 收藏0
  • 《JavaScript 闖關(guān)》之作用域和閉包

    摘要:作用域和閉包是最重要的概念之一,想要進一步學(xué)習(xí),就必須理解作用域和閉包的工作原理。全局和局部作用域的關(guān)系在函數(shù)體內(nèi),局部變量的優(yōu)先級高于同名的全局變量。作用域鏈的用途,是保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問。 作用域和閉包是 JavaScript 最重要的概念之一,想要進一步學(xué)習(xí) JavaScript,就必須理解 JavaScript 作用域和閉包的工作原理。 作用域 任何...

    Jacendfeng 評論0 收藏0
  • js溫故而知新2——學(xué)習(xí)廖雪峰的js教程

    摘要:讓我們拆開寫小明正常結(jié)果單獨調(diào)用函數(shù)怎么返回了請注意,我們已經(jīng)進入到了的一個大坑里。如果單獨調(diào)用函數(shù),比如,此時,該函數(shù)的指向全局對象,也就是。 函數(shù) 1. arguments JavaScript還有一個免費贈送的關(guān)鍵字arguments,它只在函數(shù)內(nèi)部起作用,并且永遠指向當(dāng)前函數(shù)的調(diào)用者傳入的所有參數(shù)。arguments類似Array但它不是一個Array: function fo...

    Caizhenhao 評論0 收藏0
  • 《JavaScript 闖關(guān)》之垃圾回收和內(nèi)存管理

    摘要:內(nèi)存回收此時,局部變量就沒有存在的必要了,因此可以釋放它們的內(nèi)存以供將來使用。局部變量會在它們離開執(zhí)行環(huán)境時自動被解除引用,如下面這個例子所示手工解除的引用由于局部變量在函數(shù)執(zhí)行完畢后就離開了其執(zhí)行環(huán)境,因此無需我們顯式地去為它解除引用。 JavaScript 具有自動垃圾收集機制(GC:Garbage Collecation),也就是說,執(zhí)行環(huán)境會負(fù)責(zé)管理代碼執(zhí)行過程中使用的內(nèi)存。而...

    Sleepy 評論0 收藏0
  • python基礎(chǔ)知識之函數(shù)初階——命名空間

    摘要:在內(nèi)置命名空間不能使用全局和局部的名字??梢孕蜗蟮乩斫獬蓛?nèi)置命名空間具有最高級別,不需要定義就可以使用,全局命名空間次之,最低級是局部命名空間。 python中的命名空間分三種: 內(nèi)置的命名空間,在啟動解釋器的時候自動加載進內(nèi)存的各種名字所在的空間,比如print,input等不需要定義就可以使用的名字 全局命名空間,就是從上到下所有我們定義的變量名和函數(shù)名所在的空間,是在程序從上到下...

    dack 評論0 收藏0

發(fā)表評論

0條評論

DobbyKim

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<