本文目錄一覽:
- 1、python變數與地址的關係
- 2、python中變數定義的問題
- 3、Python變數可以只定義不賦值嗎?
- 4、Python入門編程(1)變數
- 5、Python:Python 中的變數到底是什麼
- 6、python中變數的引用、可變和不可變類型、局部變數和全局變數
python變數與地址的關係
在C語言中,系統會為每個變數分配內存空間,當改變變數的值時,改變的是內存空間中的值,變數的地址是不改變的。
而在python中,Python採用的是基於值的管理方式。當給變數賦值時,系統會為這個值分配內存空間,然後讓這個變數指向這個值;當改變變數的值時,系統會為這個新的值分配另一個內存空間,然後還是讓這個變數指向這個新值。
這時,如果沒有任何變數指向內存空間的某個值,這個值稱為垃圾數據,系統會自動將其刪除,回收它佔用的內存空間。
例如:
x=12
x=3.1415926
變數x在指向3.1415926後,數值12就變成了垃圾數據。也可以使用del 命令 刪除變數,但是刪除之後就不能再使用了。否則會報錯:變數沒有定義。
也就是說,C語言中變數變的是內存空間中的值,不變的是地址;而在Python中,變數變的是地址,不變的是內存空間中的值。
python中查看變數地址可用:id(變數名)
python中變數定義的問題
要知道一個對象與變數名的關係。在python中變數名與對象是不同的東西。一般來說,通過賦值語句會生成一個對象,但這個對象一般不能直接使用,需要通過一個引用來使用它,即給它一個名字。也就是等號左邊是一個變數名,右邊是生成對象的代碼,因此在執行這條賦值語句後就存在了兩個東西,一個是名字,一個是對象。在Python中把名字與變數關聯起來叫綁定。因此在後面你如果繼續對同一個變數名賦值的話,其實是實現了對變數名與新對象的重新綁定,在Python中這是允許的,原來綁定的對象如果無人再使用就自動回收,否則就將引用計數減一。而這個對象是無法改變類型了。因此你上面的a是變數名,後面才是對象的定義。不知道你是否理解。
Python變數可以只定義不賦值嗎?
題主你好,
答案肯定是不可以的.
我在官方文檔上找了一段話,希望對你的理解有幫助:
先看第二個紅框,說的是:
如果使用一個未被定義的變數, 解釋器會報錯.
關鍵是括弧中粉底的那三個詞assigned a value,用來解釋python中怎麼才叫定義一個變數,也就是說你想定義一個變數必須要給它賦值,只有給一個名稱賦了值,才叫定義了一個變數. //有的語言中, 可以使用某個關鍵字先聲明一個變數, 而賦值的操作可以後面做; 還有的語言,你可以只聲明變數而不賦值, 後面使用該未賦值的變數時, 解釋器會根據你聲明的類型賦一個默認值,等等; 也就是說不同語言對變數的處理邏輯可能不同.而 python對變數的處理邏輯就是: 定義和賦值二者綁在一塊了, 即賦值的過程同時完成了”定義+賦值”, 不存在”只定義”這個過程.
而python中變數的賦值在第一個紅框中也說明了,就是 使用等號連接變數和值, 左邊變數右邊值.
—–
希望可以幫到題主, 歡迎追問, 如果有啥錯誤歡迎指正.
Python入門編程(1)變數
在開始本次的學習之前,我們先運行一下Test1.py。程序輸出了 helloworld ,下面我們再進行一些更深入的思考,當這個文件被運行時,Python都做了些什麼。
Test1.py
在運行這個文件時,它的 .py 後綴說明這是一個Python程序,因此 編譯器 會使用 Python解釋器 來運行它。接著解釋器會讀取整個程序,並且確認其中每個單詞的含義。比如在這個程序中解釋器遇到了 print() 這個單詞,它便會把括弧內的內容列印出來,而不管括弧裡面是什麼。
在你編寫程序時,編譯器在會把程序中每個不同的不同用不同的顏色顯示。比如 :
print (” helloworld “)
這種非常實用的方法叫做 語法突出 。
以上這些內容只是需要進行理解即可,接下來的內容我們便需要認真學習了。
讓我們對 Test1.py 稍加修改,在這個程序中加入一個變數 sentence , 並且對print函數內的內容稍加修改,以便於讓我們更好的認識變數。
通過這個程序的運行結果我們可見,修改之後的程序與先前的程序輸出相同。在這裡我們添加了一個名為 sentence 的變數,可知:
每個變數都儲存了一個對應的值,這個值就是與變數相關聯的信息。
現在我們對這個程序再加一點點的修改:
此時可以看出,同一個變數進行了兩次不同的輸出,這便是:
你可以隨時在程序中修改變數的值,並且Python將變數的最新值記錄下來。
程序員幾乎每天都會犯錯,下面這是一種我們初學階段很有可能反的錯誤,下面我們來了解並學習如何解決它。
我們來看看這個新的程序。
Test2.py
在程序出現錯誤時,編譯器無法對其進行下一步編譯,此時編譯器便會返回給我們一個 Traceback 。其是一條記錄,它會解釋器在運行代碼時在哪裡陷入困境,以上我提供的便是變數名拼寫錯誤所被提供的 Traceback 。
編譯器已經指出,在我運行Test2.py這個程序時,我們想輸出的變數 sentece 並未被定義,程序無法找到識別我所提供的變數名。
名稱錯誤的兩種情況:1.在使用變數前未給變數賦值。2.變數名拼寫錯誤。
在我這個提供的例子中,我們只需要將 sentece 修改為 sentence 便可以使程序正確運行了。
在創建程序中的變數名和編寫代碼時不必遵循英語的語法與拼寫規則。
其實絕大多數的報錯無非是在程序的某一行多寫或少寫一個字元,或是一些邏輯性的錯誤。在閱讀Traceback以及尋找解決這些Bug的方法時我們應當 耐心 和 冷靜 。這樣會提升你解決問題的速度。
本次的文章對變數進行了初步的認識與學習,在接下來的文章中,我們將對更多Python中的相關知識進行闡述與學習。
本次的文章就先寫到這裡,下次我們將會進行對 數據類型 的學習。
Python:Python 中的變數到底是什麼
— 用標識符命名的存儲單元的地址稱為變數;
— 變數是用來存儲數據的,通過標識符可以獲取變數的值,也可以對變數進行賦值;
— 通過上面的示例我們發現,我們將 a 賦值給 b 以後,對 b 的 append 操作直接影響了 a,導致 a 也跟著 append 一個 4 元素;
— 這從側面說明 a 和 b 兩個變數指向同一塊內存區域。
python中變數的引用、可變和不可變類型、局部變數和全局變數
變數的引用
變數和數據都是保存在內存中的
變數和數據是分開存儲的
數據保存在內存中某個位置,通過地址來標記
變數保存的是數據的地址,通過地址可以找到數據在內存空間的位置
把變數保存數據地址的過程稱為引用
變數的重新賦值修改的是變數中引用數據的內存地址
變數之間的賦值實際是引用的傳遞
函數參數的傳遞,本質也是引用的傳遞
函數的返回值本身也是引用的傳遞
可變和不可變類型
不可變類型,內存中的數據不允許被修改:數字類型(int,bool,float,complex,long(2,x)、字元串、元組(tuple)
可變類型,內存中的數據可以被修改:列表list、字典dict
無論是可變還是不可變數據類型,通過賦值語句,都會改變變數的引用
Hash函數只能接收不可變數據類型,字典的鍵也只能是不可變數據類型,字典的value值可以是任意數據類型
局部變數
1.在函數內部定義的變數就是局部變數(作用範圍只能是當前函數內部)
2.在函數外部無法直接訪問局部變數
3.不同的函數中可以定義同名的局部變數
4.局部變數的生命周期:從定義變數時開始,到函數運行結束
全局變數
1.在所有函數外邊定義的變數就是全局變數
2.讓所有函數都能訪問到,可以作為函數通信的橋樑
3.一般情況下,為了和普通變數的區別,需要加上g_或gl_前綴
4.全局變數一般放在所有函數的最上面
5.在函數內部修改全局變數,必須要加上global關鍵字,如果不加global只是定義了一個同名的局部變數
函數的多個返回值
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/159204.html