[英]Explain locals() and exactly how it works
有人可以解釋一下這小段代碼如何工作嗎?
info = {}
info.update(locals())
info.pop('self', None)
info.pop('info', None)
我是假設的人,如果我錯了,請糾正我,但是它會獲取當前函數中的所有變量,然后將它們放在dict中,並刪除self和它放入的dict,對嗎? 除了自我和我可能不想去的字典,還有別的嗎?
僅用JSON序列化該字典並將其發布會有什么問題嗎?
這可能來自Django模板和本地技巧 。 這個想法是在函數內部填充多個變量,然后使用locals()
將它們傳遞給模板。 它節省了使用所有這些變量創建新字典的工作。
具體來說,您的代碼創建了所有局部變量的字典,並刪除了self
(類對象參數)和info
(剛剛創建的變量)。 返回所有其他局部變量。
然后,只要可以序列化數據,就可以對數據進行JSON序列化。 例如,必須先將DateTime變量轉換為字符串。
該代碼創建了一個名為'info'的新字典,並將所有本地python變量分配給它。 注意:這些是指向同一個對象在本地環境,因此,如果您修改列表或字典info
將在您的環境中也改變了(這可能是也可能不是所期望的行為)。
locals()更新並返回代表當前本地符號表的字典。 當在功能塊中調用免費變量時,它是由locals()返回的,而不是在類塊中調用。
注意:此字典的內容不應修改; 更改可能不會影響解釋器使用的局部變量和自由變量的值。
info.pop('self', None)
和info.pop('info', None)
將從您的新info
字典中分別刪除'self'和'info'。 如果不存在,則返回None
。 請注意,如果字典中未info.pop('self')
, info.pop('self')
將返回info.pop('self')
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.