草根學Python(二)基本資料型別和變數

weixin_33866037發表於2017-06-19

前言

最近要開始新的專案,工作又開始忙起來了,不過還是每天要抽時間來寫部落格,但不可能做到日更,因為一篇部落格,寫的時間還是挺長的。Gitbook 同時更新喔。

目錄

2136918-515fab64547b0a4b.png
草根學Python(二)基本資料型別和變數

一、Python 語法的簡要說明

每種語言都有自己的語法,不管是自然語言還是我們的計算機程式語言,Python 也不例外,編輯器或者解析器根據符合語法的程式程式碼轉換成 CPU 能夠執行的機器碼,然後執行。

Python 的語法比較簡單,採用縮排方式。因為之前是寫 JAVA 或者 C++ 偏多,突然沒了大括號和要注意縮排,是有點不習慣的,不過還是可以接受的。而且要養成使用 4 個空格的縮排,可以在文字編輯器設定 Tab 自動轉換為 4 個空格。

2136918-b9b072c2587cc89e.png
Python語法.png

以 # 開頭的語句是註釋,其他每一行都是一個語句,當語句以冒號 : 結尾時,縮排的語句視為程式碼塊。要注意的是 Python 程式是大小寫敏感的,如果寫錯了大小寫,程式會報錯。

更多的說明可以看看之前的文章:Python程式碼規範中的簡明概述

二、Python 的基本資料型別

1、整數

Python 可以處理任意大小的整數,當然包括負整數,在 Python 程式中,整數的表示方法和數學上的寫法一模一樣,例如:1100-80800,等等。

計算機由於使用二進位制,所以,有時候用十六進位制表示整數比較方便,十六進位制用 0x 字首和 0-9,a-f 表示,例如:0xff00,0xa5b4c3d2,等等。

2、浮點數

浮點數也就是小數,之所以稱為浮點數,是因為按照科學記數法表示時,一個浮點數的小數點位置是可變的。整數和浮點數在計算機內部儲存的方式是不同的,整數運算永遠是精確的(除法也是精確的),而浮點數運算則可能會有四捨五入的誤差。

3、字串

字串是以 '' 或 "" 括起來的任意文字,比如 'abc'"123" 等等。請注意,'' 或 "" 本身只是一種表示方式,不是字串的一部分,因此,字串 'abc' 只有 a,b,c 這 3 個字元。這個其他的程式語言也是類似的。

(1) Python 中的字串和字串轉義

在上面那裡提到,字串可以用 '' 或者 "" 括起來表示。可是有些時候,我們字串本身就包含了 '' 或者 "" ,怎麼辦呢?

那這個時候就需要對字串的某些特殊字元進行“轉義”,Python 字串用 \ 進行轉義。跟 JAVA 也是一樣的。

常用的轉義字元還有:

\n 表示換行
\t 表示一個製表符
\\ 表示 \ 字元本身

具體例子:

2136918-88fdd2055dd834f4.png
Python字串轉義.png

那上面就有一個問題呢,如果一個字串包含很多需要轉義的字元,對每一個字元都進行轉義會很麻煩。這裡為了應付這種情況,我們可以在字串前面加個字首 r ,表示這是一個 raw 字串,裡面的字元就不需要轉義了。

2136918-8391230097f54800.png
Python轉義r.png

但是,要注意的一點是,但是r'...'表示法不能表示多行字串,也不能表示包含'"的字串。

如果要表示多行字串,可以用'''...'''表示,當然你也還可以在多行字串前面新增 r ,把這個多行字串也變成一個raw字串

2136918-36df87f50895af18.png
多行轉義.png

(2) 字串的編碼問題

我們都知道計算機只能處理數字,如果要處理文字,就必須先把文字轉換為數字才能處理。最早的計算機在設計時採用8個位元(bit)作為一個位元組(byte),所以,一個位元組能表示的最大的整數就是255(二進位制11111111=十進位制255),0 - 255被用來表示大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母 A 的編碼是 65,小寫字母 z 的編碼是 122。

如果要表示中文,顯然一個位元組是不夠的,至少需要兩個位元組,而且還不能和 ASCII 編碼衝突,所以,中國製定了 GB2312 編碼,用來把中文編進去。

類似的,日文和韓文等其他語言也有這個問題。為了統一所有文字的編碼,Unicode 應運而生。Unicode 把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。

Unicode 通常用兩個位元組表示一個字元,原有的英文編碼從單位元組變成雙位元組,只需要把高位元組全部填為 0 就可以。

因為 Python 的誕生比 Unicode 標準釋出的時間還要早,所以最早的Python 只支援 ASCII 編碼,普通的字串 'ABC' 在 Python 內部都是 ASCII 編碼的。

Python 在後來新增了對 Unicode 的支援,以 Unicode 表示的字串用u'...'表示。

不過在最新的 Python 3 版本中,字串是以 Unicode 編碼的,也就是說,Python 的字串支援多語言。就像上面的例子一樣,我的程式碼中沒有加u'...',也能正常顯示。

不過由於 Python 原始碼也是一個文字檔案,所以,當你的原始碼中包含中文的時候,在儲存原始碼時,就需要務必指定儲存為 UTF-8 編碼。當Python 直譯器讀取原始碼時,為了讓它按 UTF-8 編碼讀取,我們通常在檔案開頭寫上這兩行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第一行註釋是為了告訴 Linux/OS X 系統,這是一個 Python 可執行程式,Windows 系統會忽略這個註釋;

第二行註釋是為了告訴 Python 直譯器,按照 UTF-8 編碼讀取原始碼,否則,你在原始碼中寫的中文輸出可能會有亂碼。

申明瞭 UTF-8 編碼並不意味著你的 .py 檔案就是 UTF-8 編碼的,必須並且要確保文字編輯器正在使用 UTF-8 without BOM 編碼

4、布林值

布林值和布林代數的表示完全一致,一個布林值只有 TrueFalse兩種值,要麼是 True,要麼是 False,在 Python 中,可以直接用 True、False 表示布林值(請注意大小寫),也可以通過布林運算計算出來。

布林值可以用 andornot 運算。

and 運算是與運算,只有所有都為 True,and 運算結果才是 True。

or 運算是或運算,只要其中有一個為 True,or 運算結果就是 True。

not 運算是非運算,它是一個單目運算子,把 True 變成 False,False 變成 True。

5、空值

基本上每種程式語言都有自己的特殊值——空值,在 Python 中,用 None 來表示

三、基本資料型別轉換

方法 說明
int(x [,base ]) 將x轉換為一個整數
long(x [,base ]) 將x轉換為一個長整數
float(x ) 將x轉換到一個浮點數
complex(real [,imag ]) 建立一個複數
str(x ) 將物件 x 轉換為字串
repr(x ) 將物件 x 轉換為表示式字串
eval(str ) 用來計算在字串中的有效 Python 表示式,並返回一個物件
tuple(s ) 將序列 s 轉換為一個元組
list(s ) 將序列 s 轉換為一個列表
chr(x ) 將一個整數轉換為一個字元
unichr(x ) 將一個整數轉換為 Unicode 字元
ord(x ) 將一個字元轉換為它的整數值
hex(x ) 將一個整數轉換為一個十六進位制字串
oct(x ) 將一個整數轉換為一個八進位制字串

四、Python 中的變數

1、變數的建立和賦值

在 Python 程式中,變數是用一個變數名錶示,可以是任意資料型別,變數名必須是大小寫英文、數字和下劃線(_)的組合,且不能用數字開頭,比如:

a=88

這裡的 a 就是一個變數,代表一個整數,注意一點是 Python 是不用宣告資料型別的。在 Python 中 = 是賦值語句,跟其他的程式語言也是一樣的,因為 Python 定義變數時不需要宣告資料型別,因此可以把任意的資料型別賦值給變數,且同一個變數可以反覆賦值,而且可以是不同的資料型別。

2136918-69affa6da83f1dfc.png
Python 中的變數.png

這種變數本身型別不固定的語言稱之為動態語言,與之對應的是靜態語言。靜態語言在定義變數時必須指定變數型別,如果賦值的時候型別不匹配,就會報錯。例如 Java 是靜態語言。

2、變數的指向問題

我們來看下這段程式碼,發現最後列印出來的變數 b 是 Hello Python

2136918-052a908c25fcfc49.png
Python變數指向.png

這主要是變數 a 一開始是指向了字串 Hello Pythonb=a 建立了變數 b ,變數 b 也指向了a 指向的字串 Hello Python,最後 a=123,把 變數 a 重新指向了 123,所以最後輸出變數 b 是 Hello Python

2136918-cae1e6db4c9e5dde.png
變數的指向

3、多個變數賦值

Python 允許同時為多個變數賦值。例如:

a = b = c = 1

以上例項,建立一個整型物件,值為 1,三個變數被分配到相同的記憶體空間上。

當然也可以為多個物件指定多個變數。例如:

a, b, c = 1, 2, "liangdianshui"

以上例項,兩個整型物件 1 和 2 的分配給變數 a 和 b,字串物件 "liangdianshui" 分配給變數 c。

相關文章