1. 程式人生 > 實用技巧 >02-變數

02-變數

# 變數
# 什麼是變數? 為何要有變數?
# 變數的三大組成部分是?每部分的作用
# 變數的命名元組、規範、風格
# 變數值的三大特徵是什麼?
# is與==的區別

# 1、 什麼是變數
# 變數是指可以變化的量,量指的是事物的狀態,比如人的年齡、性別等

# 2、 為什麼要有變數
# 為了讓計算機能夠像人一樣去記憶事物的某種狀態,並且狀態是可以發生變化的
# 程式執行的本質是一系列狀態的變化,變是程式執行的直接體現,所以我們需要有一種機制能夠反映或者儲存下來

# 3、 怎麼用
# 3.1 變數基本使用
# 原則:先定義、後引用
name = 'xxx'  # 定義-->存
print(name)  # 引用-->取

# 3.2 記憶體管理:垃圾回收機制
# 垃圾:當一個變數值被繫結的變數名的個數為0時,該變數值無法被訪問到,稱之為垃圾
# 引用計數增加
x = 10  # 10的引用計數為1
y = x  # 10的引用計數為2
z = x  # 10的引用計數為3

# 引用計數減少
del x  # 刪除變數名x與值10的繫結關係,10的引用計數變為2
# print(x, y)  # 列印x報錯:NameError: name 'x' is not defined
del y  # 10的引用計數變為1
# print(z)  # 10
z = 231  # 10的引用計數變為0
# print(z)  # 231

# 3.3 變數三大組成部分
# Ⅰ:變數名=>指向等號右側值的記憶體地址,用來訪問等號右側的值
# Ⅱ:賦值符號:將變數值的記憶體地址繫結給變數名
# Ⅲ:變數值:代表記錄的事物的狀態

# 3.4 變數名的命名規則
# 原則:變數名的命名應該見名知意
# 3.4.1 變數名只能是 字母、數字、下劃線的任意組合
# 3.4.2 變數名不能以數字開頭 SyntaxError:invalid syntax
# 3.4.3 關鍵字不能宣告為變數名,關鍵字:
# 檢視所有關鍵字
#       import keyword
#  		print(keyword.kwlist)
# ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
# 3.4.4-內建函式名不能使用---否則該函式失去函式意義!--ex--print

# 3.5 變數名的命名風格
# 3.5.1 純小寫加下劃線的方式(在python中,關於變數名的命名推薦使用這種方式)
age_of_ly = 7
print(age_of_ly)
# 3.5.2 駝峰體
AgeOfLy = 7
print(age_of_ly)

# 3.6 變數值三個重要的特徵
# 3.6.1 id、type、value
name = 'LY'
print(id(name))  # 2432816488048
print(type(name))  # <class 'str'>
print(name)  # LY
# id:反應的時變數值的記憶體地址,記憶體地址不同id則不同
# type:不同型別的值用來記錄不同的狀態
# value:值本身

# 3.6.2 is與==
# is:比較左右兩個值身份id是否相等
# ==:比較左右兩個值他們的值是否相等

# id不同情況下,值可能相同、即兩塊不同的記憶體空間李可以存相同的變數
# id相同的情況下,值一定相同

# pycharm執行
x = 'info:ly:1023213'
y = 'info:ly:1023213'
print(x, y)  # ('info:ly:1023213', 'info:ly:1023213')
print(id(x), id(y))
# (2972975406704 2972975406704)

# 命令列執行
# >>> x = 'info:ly:1023213'
# >>> y = 'info:ly:1023213'
# >>> x,y
# ('info:ly:1023213', 'info:ly:1023213')
# >>> id(x),id(y)
# (1829332913776, 1829332239152)
# >>> x is y
# False
# >>> x == y
# True

# 疑問:為什麼在pycharm中x和y的id值怎麼是一樣的?
# 這是因為在pycharm中 ,每次執行是所有程式碼都載入到記憶體中,屬於一個整體,
# 所以這個時候會有一個大整數物件池,即處於一個程式碼塊的大整數是同一個物件,我們只需要記住這是一種優化機制,無需細究。

# 3.6.3 小整數池[-5,256]
# python對小整數的定義是【-5,256】這些證書物件是提前建立好的,不會被垃圾回收。

# 4. 常量:不變的量
# 注意:python語法中沒有常量的概念,但是在程式的開發過程中會涉及到常量的概念
AGE_OF_LY = 18  # 小寫字母全為大寫代表常量,這只是一種約定、規範