python with語句中的變量有作用域嗎?


一直以為python中的with語句中的變量,只在with語句塊中起作用。不然為什么要縮進一個級別呢?

呵呵,然而並沒有為with語句內的變量創建新的作用域。

舉例:

# test.py

with open('test.txt', 'w') as fout:
    a = 12
    line = 'test line\n'
    fout.write(line)

print('a=', a)  #這里訪問了a變量,會報錯嗎?並不會。

執行上述代碼,發現最后一行的print語句並沒有報錯,因為with並沒有為a新創建作用域。

類似的寫法,出現在tensorflow eager入門教程的求導函數中:

def grad(model, inputs, targets):
    with tf.GradientTape() as tape:
        loss_value = loss(model, inputs, targets)
    return tape.gradient(loss_value, model.variables)       #這里使用到了tape


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM