在 Python中
注意:如果變量已經被定義,當給一個變量賦值的時候,本質上是 修改了數據的引用
變量 不再 對之前的數據引用
變量 改為 對新賦值的數據引用
1.2變量引用 的示例
在 Python中,變量的名字類似於 便籤紙 貼在 數據 上
a = 1
a=1
a = 2
a=2
b = a
b=a
變量 b是第 2 個貼在數字 2上的標籤
1.3 函數的參數和返回值的傳遞在 Python中,函數的 實參/返回值 都是是靠 引用 來傳遞來的
python def test(num):
print("-" * 50)
print("%d 在函數內的內存地址是 %x" % (num, id(num)))
result = 100
print("返回值 %d 在內存中的地址是 %x" % (result, id(result)))
print("-" * 50)
return result
a = 10 print("調用函數前 內存地址是 %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
python a = 1
a = "hello"
a = [1, 2, 3]
a = [3, 2, 1]
python demo_list = [1, 2, 3]
print("定義列表後的內存地址 %d" % id(demo_list))
demolist.append(999) demolist.pop(0) demolist.remove(2) demolist[0] = 10
print("修改數據後的內存地址 %d" % id(demo_list))
demo_dict = {"name": "小明"}
print("定義字典後的內存地址 %d" % id(demo_dict))
demodict["age"] = 18 demodict.pop("name") demo_dict["name"] = "老王"
print("修改數據後的內存地址 %d" % id(demo_dict))
```
注意:字典的 key只能使用不可變類型的數據
注意
可變類型的數據變化,是通過 方法 來實現的
如果給一個可變類型的變量,賦值了一個新的數據,引用會修改
變量 不再 對之前的數據引用
變量 改為 對新賦值的數據引用
哈希(hash)
Python 中內置有一個名字叫做 hash(o)的函數
接收一個 不可變類型 的數據作為 參數
返回 結果是一個 整數
哈希
是一種 算法,其作用就是提取數據的 特徵碼(指紋)
相同的內容 得到 相同的結果
不同的內容 得到 不同的結果
在 Python 中,設置字典的 鍵值對 時,會首先對 key 進行 hash 已決定如何在內存中保存字典的數據,以方便 後續 對字典的操作:增、刪、改、查
鍵值對的 key必須是不可變類型數據鍵值對的 value可以是任意類型的數據
03. 局部變量和全局變量提示:在其他的開發語言中,大多 不推薦使用全局變量 —— 可變範圍太大,導致程序不好維護!
3.1 局部變量局部變量的作用```python def demo1():
num = 10 print(num) num = 20 print("修改後 %d" % num)
def demo2():
num = 100 print(num)
demo1() demo2()
print("over")
```
局部變量的生命周期3.2 全局變量```python
定義一個全局變量num = 10
def demo1():
print(num)
def demo2():
print(num)
demo1() demo2()
print("over")
```
注意:函數執行時,需要處理變量時 會:
首先 查找 函數內部 是否存在 指定名稱 的局部變量,如果有,直接使用
如果沒有,查找 函數外部 是否存在 指定名稱 的全局變量,如果有,直接使用
如果還沒有,程序報錯!
1) 函數不能直接修改全局變量的引用
提示:在其他的開發語言中,大多 不推薦使用全局變量 —— 可變範圍太大,導致程序不好維護!
```python num = 10
def demo1():
print("demo1" + "-" * 50) # 只是定義了一個局部變量,不會修改到全局變量,只是變量名相同而已 num = 100 print(num)
def demo2():
print("demo2" + "-" * 50) print(num)
demo1() demo2()
print("over")
```
注意:只是在函數內部定義了一個局部變量而已,只是變量名相同 —— 在函數內部不能直接修改全局變量的值
2) 在函數內部修改全局變量的值```python num = 10
def demo1():
print("demo1" + "-" * 50) # global 關鍵字,告訴 Python 解釋器 num 是一個全局變量 global num # 只是定義了一個局部變量,不會修改到全局變量,只是變量名相同而已 num = 100 print(num)
def demo2():
print("demo2" + "-" * 50) print(num)
demo1() demo2()
print("over")
```
3) 全局變量定義的位置```python a = 10
def demo():
print("%d" % a)
print("%d" % b)
print("%d" % c)
b = 20
demo()
c = 30
```
注意
代碼結構示意圖如下
4) 全局變量命名的建議提示:具體的要求格式,各公司要求可能會有些差異