目標
變量的引用
可變和不可變類型
局部變量和全局變量
變量 和 數據 都是保存在 內存 中的
在 Python 中 函數 的 參數傳遞 以及 返回值 都是靠 引用 傳遞的
在 Python 中
變量 和 數據 是分開存儲的
數據 保存在內存中的一個位置
變量 中保存著數據在內存中的地址
變量 中 記錄數據的地址,就叫做 引用
使用 id() 函數可以查看變量中保存數據所在的 內存地址
注意:如果變量已經被定義,當給一個變量賦值的時候,本質上是 修改了數據的引用
變量 不再 對之前的數據引用
變量 改為 對新賦值的數據引用
在 Python 中,變量的名字類似于 便簽紙 貼在 數據 上
定義一個整數變量 a,并且賦值為 1
將變量 a 賦值為 2
定義一個整數變量 b,并且將變量 a 的值賦值給 b
變量 b 是第 2 個貼在數字 2 上的標簽
在 Python 中,函數的 實參/返回值 都是是靠 引用 來傳遞來的
deftest(num):print("-"*50)print("%d在函數內的內存地址是%x"%(num,id(num)))result=100print("返回值%d在內存中的地址是%x"%(result,id(result)))print("-"*50)returnresulta=10print("調用函數前內存地址是%x"%id(a))r=test(a)print("調用函數后實參內存地址是%x"%id(a))print("調用函數后返回值內存地址是%x"%id(r))
不可變類型,內存中的數據不允許被修改:
數字類型 int, bool, float, complex, long(2.x)
字符串 str
元組 tuple
可變類型,內存中的數據可以被修改:
列表 list
字典 dict
a=1a="hello"a=[1,2,3]a=[3,2,1]
demo_list=[1,2,3]print("定義列表后的內存地址%d"%id(demo_list))demo_list.append(999)demo_list.pop(0)demo_list.remove(2)demo_list[0]=10print("修改數據后的內存地址%d"%id(demo_list))demo_dict={"name":"小明"}print("定義字典后的內存地址%d"%id(demo_dict))demo_dict["age"]=18demo_dict.pop("name")demo_dict["name"]="老王"print("修改數據后的內存地址%d"%id(demo_dict))
注意:字典的 key 只能使用不可變類型的數據
注意
可變類型的數據變化,是通過 方法 來實現的
如果給一個可變類型的變量,賦值了一個新的數據,引用會修改
變量 不再 對之前的數據引用
變量 改為 對新賦值的數據引用
哈希 (hash)
Python 中內置有一個名字叫做 hash(o) 的函數
接收一個 不可變類型 的數據作為 參數
返回 結果是一個 整數
哈希 是一種 算法,其作用就是提取數據的 特征碼(指紋)
相同的內容 得到 相同的結果
不同的內容 得到 不同的結果
在 Python 中,設置字典的 鍵值對 時,會首先對 key 進行 hash 已決定如何在內存中保存字典的數據,以方便 后續 對字典的操作:增、刪、改、查
鍵值對的 key 必須是不可變類型數據
鍵值對的 value 可以是任意類型的數據
局部變量 是在 函數內部 定義的變量,只能在函數內部使用
全局變量 是在 函數外部定義 的變量(沒有定義在某一個函數內),所有函數 內部 都可以使用這個變量
提示:在其他的開發語言中,大多 不推薦使用全局變量 —— 可變范圍太大,導致程序不好維護!
局部變量 是在 函數內部 定義的變量,只能在函數內部使用
函數執行結束后,函數內部的局部變量,會被系統回收
不同的函數,可以定義相同的名字的局部變量,但是 彼此之間 不會產生影響
局部變量的作用
在函數內部使用,臨時 保存 函數內部需要使用的數據
defdemo1():num=10print(num)num=20print("修改后%d"%num)defdemo2():num=100print(num)demo1()demo2()print("over")
局部變量的生命周期
所謂 生命周期 就是變量從 被創建 到 被系統回收 的過程
局部變量 在 函數執行時 才會被創建
函數執行結束后 局部變量 被系統回收
局部變量在生命周期 內,可以用來存儲 函數內部臨時使用到的數據
全局變量 是在 函數外部定義 的變量,所有函數內部都可以使用這個變量
#定義一個全局變量num=10defdemo1():print(num)defdemo2():print(num)demo1()demo2()print("over")
注意:函數執行時,需要處理變量時 會:
首先 查找 函數內部 是否存在 指定名稱 的局部變量,如果有,直接使用
如果沒有,查找 函數外部 是否存在 指定名稱 的全局變量,如果有,直接使用
如果還沒有,程序報錯!
1) 函數不能直接修改 全局變量的引用
全局變量 是在 函數外部定義 的變量(沒有定義在某一個函數內),所有函數 內部 都可以使用這個變量
提示:在其他的開發語言中,大多 不推薦使用全局變量 —— 可變范圍太大,導致程序不好維護!
在函數內部,可以 通過全局變量的引用獲取對應的數據
但是,不允許直接修改全局變量的引用 —— 使用賦值語句修改全局變量的值
num=10defdemo1():print("demo1"+"-"*50)#只是定義了一個局部變量,不會修改到全局變量,只是變量名相同而已num=100print(num)defdemo2():print("demo2"+"-"*50)print(num)demo1()demo2()print("over")
注意:只是在函數內部定義了一個局部變量而已,只是變量名相同 —— 在函數內部不能直接修改全局變量的值
2) 在函數內部修改全局變量的值
如果在函數中需要修改全局變量,需要使用 global 進行聲明
num=10defdemo1():print("demo1"+"-"*50)#global關鍵字,告訴Python解釋器num是一個全局變量globalnum#只是定義了一個局部變量,不會修改到全局變量,只是變量名相同而已num=100print(num)defdemo2():print("demo2"+"-"*50)print(num)demo1()demo2()print("over")
3) 全局變量定義的位置
為了保證所有的函數都能夠正確使用到全局變量,應該 將全局變量定義在其他函數的上方
a=10defdemo():print("%d"%a)print("%d"%b)print("%d"%c)b=20demo()c=30
注意
由于全局變量 c,是在調用函數之后,才定義的,在執行函數時,變量還沒有定義,所以程序會報錯!
代碼結構示意圖如下
4) 全局變量命名的建議
為了避免局部變量和全局變量出現混淆,在定義全局變量時,有些公司會有一些開發要求,例如:
全局變量名前應該增加 g_ 或者 gl_ 的前綴
1、簡單易用,與C/C++、Java、C# 等傳統語言相比,Python對代碼格式的要求沒有那么嚴格;2、Python屬于開源的,所有人都可以看到源代碼,并且可以被移植在許多平臺上使用;3、Python面向對象,能夠支持面向過程編程,也支持面向對象編程;4、Python是一種解釋性語言,Python寫的程序不需要編譯成二進制代碼,可以直接從源代碼運行程序;5、Python功能強大,擁有的模塊眾多,基本能夠實現所有的常見功能。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注本站行業資訊頻道,感謝您對本站的支持。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
什么是基金交易賬戶?基金交易賬戶是銀行為投資者設立的用于在本行進行基金交易的帳戶。投資者通過銀行代銷網點辦理基金業務時,必須先開立基金交易帳戶。該帳戶用于記載投資者進行基金交易活動的情況和所持有的基金份額?;鸾灰踪~戶是投資人通過該銷售機構買賣基金份額的變動及結余情況的賬戶?;鸾灰踪~戶和TA賬戶的區別在哪?1、同一個人的身份證只能對應一個TA賬戶,但是基金賬戶可以對應多個;2、TA賬戶相關的是銀...
電匯多久到賬?國內電匯和跨境電匯的到賬時間不一樣。一般國內同行電匯實時到賬,同城跨行電匯也比較快,一般在半小時以內??缧须妳R到賬時間較長,一般在三個工作日內,節假日不計入工作日??缇畴妳R到賬時間相對較長,一般需要3-7天。電匯是什么意思?電匯是一種匯兌結算方式,是匯款入將一定款項交存匯款銀行,匯款銀行通過電報或電傳給目的地的分行或代理行(匯入行),指示匯入行向收款人支付一定金額的一種匯款方式??梢?..
港珠澳大橋是連接香港、珠海和澳門的跨海大橋,港珠澳大橋看起來非常的宏偉壯觀,那么港珠澳大橋造價多少億呢?港珠澳大橋是誰出資建造的?一起來簡單了解下吧。港珠澳大橋整體的造價大約在1269億元,大橋在2009年12月15日正式動工,2017年7月7建設完成,在2018年正式通車。港珠澳大橋東起香港國際機場附近人工島,橫跨南海伶仃洋水域,接接珠海和澳門人工島,西至珠海洪灣,整個路段長度為55公里,其中主...