摘要:最近開始學習,一直覺得定義變量前沒有命令很難受,果然今天在練習閉包時遇到了這個問題。
最近開始學習python,一直覺得python定義變量前沒有命令很難受,果然今天在練習閉包時遇到了這個問題。先看看出問題的代碼
</>復制代碼
def createCounter():
n = 0
def counter():
n = n + 1
return n
return counter
這里會報錯:UnboundLocalError: local variable "n" referenced before assignment
原因:n = n + 1 這行代碼導致的歧義理解為新定義的變量n,并且n = n + 1,由于之前n未被定義,所以會報錯
解決方法:用global命令或者nonlocal命令我喜歡用nonlocal命令,因為global命令會導致全局變量臃腫,修改后代碼如下
</>復制代碼
def createCounter():
n = 0
def counter():
nonlocal n
n = n+1
return n
return counter
這樣子就不會報錯了
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41998.html
摘要:真正管理這些名子的事物就是本文的主角命名空間。閉包命名空間閉包函數的名稱空間引入。函數調用時產生新的局部命名空間函數返回結果拋出異常時釋放命名空間,每一次遞歸都生成一個命名空間。標識符產生地點決定標識符所處的命名空間。 懶得掃全文的童鞋,可以直接跳到最后看總結。我們先從一個簡單的栗子說起: 栗子 a 文件中有變量 va 以及類 A,b 文件導入 a 中class A ,并打印出 A: ...
摘要:項目地址閉包在計算機科學中,閉包英語,又稱詞法閉包或函數閉包,是引用了自由變量的函數。這個被引用的自由變量將和這個函數一同存在,即使已經離開了創造它的環境也不例外。 項目地址:https://git.io/pytips 閉包(Closure) 在計算機科學中,閉包(英語:Closure),又稱詞法閉包(Lexical Closure)或函數閉包(function closures),是...
摘要:初步認識裝飾器函數裝飾器用于在源代碼中標記函數,以某種方式增強函數的行為。函數裝飾器在導入模塊時立即執行,而被裝飾的函數只在明確調用時運行。只有涉及嵌套函數時才有閉包問題。如果想保留函數原本的屬性,可以使用標準庫中的裝飾器。 《流暢的Python》筆記本篇將從最簡單的裝飾器開始,逐漸深入到閉包的概念,然后實現參數化裝飾器,最后介紹標準庫中常用的裝飾器。 1. 初步認識裝飾器 函數裝飾...
摘要:我們說觸發了閉包的函數叫做閉包函數閉包最大的特點就是它可以被外層函數返回后賦值給一個變量,并且攜帶了外層函數內定義的變量例子如下變量為函數開辟的局部命名空間內定義的變量函數內引用了變量的內層函數名被當作返回值,此時閉包規則達成。 什么是閉包? 其實我們在使用函數過程中不經意間就會觸發閉包,因為總會出于某種原因會在函數內引用或修改上一層函數的變量,這時就會觸發閉包 那么什么是閉包?其實就...
摘要:函數裝飾器和閉包嚴格來說,裝飾器只是語法糖。何時執行裝飾器它們在被裝飾的函數定義之后立即運行。裝飾器突出了被裝飾的函數的作用,還便于臨時禁用某個促銷策略只需把裝飾器注釋掉。 函數裝飾器和閉包 嚴格來說,裝飾器只是語法糖。如前所示,裝飾器可以像常規的可調用對象那樣調用,其參數是另一個函數。有時,這樣做更方便,尤其是做元編程(在運行時改變程序的行為)時。 Python何時執行裝飾器 它們在...
閱讀 1533·2021-11-23 09:51
閱讀 3647·2021-09-26 09:46
閱讀 2136·2021-09-22 10:02
閱讀 1855·2019-08-30 15:56
閱讀 3334·2019-08-30 12:51
閱讀 2237·2019-08-30 11:12
閱讀 2069·2019-08-29 13:23
閱讀 2331·2019-08-29 13:16
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要