Python入門:Python變數和賦值

語言: CN / TW / HK

theme: smartblue

公眾號:尤而小屋
作者:Peter
編輯:Peter

大家好,我是Peter~

今天給大家帶來的是一篇關於Python變數與賦值的文章。

其實Python中的賦值語句我們在之前的學習過程已經接觸了很多,比如a=1,就是將數值1賦值給變數a。

在正式介紹賦值語句之前,我們先了解下Python中的變數問題。

環境

有讀者反映建議Peter寫下文章的環境,這就來了:

  • 系統:MacOS
  • 工具:jupyter notebook
  • Python版本:3.7.5
  • 文件編輯器:Typora

變數

深刻理解變數的記憶體地址

變數可以說是一個存放資料的容器。Python中在定義變數的時候,不需要宣告變數。當我們首次為變數賦值的時候,會自動建立變數並指定型別。

變數本身是沒有型別的,只是物件(賦值的資料)有型別

python a = 66 a

66

python b = 66 b

66

python type(a) # 檢視數值型別為整型int

int

python type(b) # 字串型別

int

我們定義了兩個變數a和b,它們都是數字66。雖然名稱不同,但是在計算機中它們卻代表的是同一個元素,看看他們的記憶體地址。

就好比:豬八戒(數值66)這個人,我們可以稱之為“二師兄”(放在變數a),也可以稱之為“天蓬元帥”(放在變數b),但是本質上他們都是指豬八戒,只是換了個別名,本質相同

python id(a) # a和b的記憶體地址相同

4387310752

python id(b)

4387310752

我們再定義一個變數的賦值看看:

python a = 77 a

77

python id(a)

4387311104

我們看到,之前我們把數值66賦值給變數a,記憶體地址是4430785696,然後我們又把數值77賦值為變數a,記憶體地址變成了4430786048。

為什麼?其實,這兩數值66和77本質上在計算機就是兩個物件,只不過它們剛好有個相同的名字而已。好比說,西遊記有個情節:真假美猴王

真美猴王(數值66)和假美猴王(數值77)雖然都被稱為猴子(標籤a),但是他們實際上是兩隻不同的猴子呀(分配了不同的地址)~假的最後不還是被如來給收服啦!

建立變數

通過賦值語句來實現變數的建立

```python x = 99 # 數值型 language = "python" # 字串型 number = [1,3,5,7,9] # 列表型

print(x) print(language) print(number) ```

99
python
[1, 3, 5, 7, 9]

變數名稱命名規則

python中變數的命名可以使用短名稱,比如上面的x、y、z、a、b等,也可以使用具有一定描述作用的名稱,比如age、name、sex,其他人看到就可以知道變數的含義。通常Python中的變數命名規則:

  • 變數名必須以字母或下劃線字元開頭,不能以數字開頭
  • 變數名只能包含字母數字字元和下劃線(A-z、0-9 和 _)
  • 變數名稱區分大小寫(name、Name 和 NAME 就是三個不同的變數)
  • 變數名不能和Python中的關鍵字衝突(相同),否則無效

下面我們看看Python中常見的賦值方法

賦值語句

常規賦值

賦值:將Python的某個資料物件貼在某個變數上,好像給這個物件貼上了一個標籤。Python 使用等號=作為賦值運算子,具體格式為:

```python name = value

變數 = 某個值

```

python list1 = ["python","java"] # 列表賦值給變數b list1

['python', 'java']

python list2 = [1,2,["python","html"],(1,4,7)] # 巢狀列表 list2

[1, 2, ['python', 'html'], (1, 4, 7)]

python age = 28 # 數值 age

28

python information = "xiaoming is a boy" # 字串 information

'xiaoming is a boy'

```python

定義一個變數dic,字典型別

dic = {"name":"xiaoming","age":20,"sex":"fale"} dic ```

{'name': 'xiaoming', 'age': 20, 'sex': 'fale'}

多變數賦值

同時賦值3個變數

python m, n, o= 22, "xiaoming","男" # 同時賦值3個變數

python m

22

python n

'xiaoming'

python o

'男'

上面的例子表示22賦值給m,字串物件"xiaoming"賦值給n,"男"賦值給變數o

python name, age = ("Peter",20) # 通過元組形式賦值

python name

'Peter'

python age

20

上面的例子通過Python元組的形式進行了鏈式賦值

鏈式賦值

python x1 = y1 = 33

python x1

33

python y1

33

在上面的例子中我們通過鏈式賦值同時定義了兩個變數x1和y1。其實它們在記憶體中就是同一個物件,通過id檢視記憶體地址:

python id(x1)

4387309696

python id(y1)

4387309696

其實就是同一個python物件貼上了不同的標籤而已,但是本質相同

變數互換

python k, j = 9, 5

上面的變數賦值等價於:

python k=9 j=5

python print("k =",k) print("j =",j)

k = 9
j = 5

python print("id(k): ", id(k)) print("id(j): ", id(j))

id(k):  4387308928
id(j):  4387308800

下面我們交換kj兩個變數的值:

python k, j = j, k # 變數值的交換

上面語句的含義表示為:將變數j的值(已經賦值了5)再賦值給變數k;將變數的值(已經賦值了9)再賦值給變數j;

python print("k =",k) print("j =",j)

k = 5
j = 9

python print("id(k): ", id(k)) print("id(j): ", id(j))

id(k):  4387308800
id(j):  4387308928

通過對比交換前後兩個變數的記憶體地址,我們發現:記憶體地址交換了,也就是變數已經發生了交換

在其他程式語言中實現變數值的交換的操作是(假設已經定義了兩個變數a和b):

python temp = a # a賦值中間變數temp a = b # b的值賦給變數a b = temp # temp的值賦給變數b

變數的相等和相同

首先,必須宣告的是Python中變數的相等和相同,是不同的兩個概念,舉例子說明

python number1 = 88 number2 = 88

python id(number1)

4387311456

python id(number2)

4387311456

判斷兩個變數是否相等:使用==

python number1 == number2

True

判斷兩個變數是否相同:使用is

python number1 is number2

True

結果都是True,說明number1和number2兩個變數就是同一個物件

python list1 = "hello python" list2 = "hello python"

python list1 == list2 # 相等

True

python list1 is list2 # 不相同

False

上面的結果表明:list1和list2是相等,但是不相同。

python id(list1)

4444494000

python id(list2)

4444495024

通過檢視二者的記憶體地址發現:它們的地址真的不同,所以肯定是不相同的兩個物件。

我們再看最後一個情況:

python number3 = 1000 number4 = 1000

python number3 == number4 # 相等

True

python number3 is number4 # 居然不相等啦!

False

我們檢視下二者的記憶體地址,發現它們的地址真的不同,所以肯定不是同一個物件啦~

python id(number3)

4444408880

python id(number4)

4444409104

這到底是為什麼呢?以後揭曉~