python中的 += 與 +


這一部分首先要理解python內存機制,Python中萬物皆對象。

對於不可變對象,改變了原來的值,其別名(變量名)綁定到了新值上面,id肯定會改變

     

對於可變對象,+ 操作改變了值,id肯定會變,而+= 是本地操作,其值原地修改

對於+號操作,可變對象和不可變對象調用的都是__add__操作

對於+=號操作,可變對象調用__add__,不可變對象調用的是__iadd__(不可變對象沒有__iadd__)   __iadd__是原地修改

 

 

錯誤:

注意:一個函數內部的任何類型的賦值都會把一個名稱划分為本地的。這包括=語句,import中的模塊名稱、def中的函數名稱、函數參數名稱等。如果在def中以任意方式賦值一個名稱,它都將對於該函數稱為本地的。

特別注意:原處改變的對象並不會把變量划分文本地變量,實際上,只是對變量名賦值才可以。例如變量名L在模塊的頂層被賦值為一個列表,在函數內部的像L.append(x)這樣的語句並不會將L划分為本地變量,而L=Y卻可以。修改一個對象並不是對一個名稱賦值。

變量名解析:LEGB原則:

在函數中使用未認證的變量名時,python搜索4個作用域:本地作用域(L),之后是上一層結構中的def或者lambda本地作用域(E),之后是全局作用域(G),最后是內置作用域(B)

 


免責聲明!

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



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