python學習筆記(一)——Python基礎

一、python 基礎語法

python 的解釋器在啓動時會自動加載一個內建的模塊,因此我們在使用 print()、input()等函數時不用導入其他模塊文件。

基本語法:
  1. 每條語句結尾沒有分號
  2. 定義變量不需要前置聲明變量的類型(動態語言)
  3. 定義常量不需要特殊關鍵字,如 PI=3.14,但是PI可改變如PI=5
  4. 註釋,採用 # 進行單行註釋,用""“xxx”""或’’‘xxx’’'多行註釋
基本數據類型
  • 整型(int):類似於C語言中的 long long類型,取值範圍取決於計算機內存大小,甚至一個數可以佔滿整個內存。

    進製表示 十進制 二進制 八進制 十六進制
    不同進製表示 整數10 0b1010 0o12 0xa
    進制轉換 任意整數x bin(x) oct(x) hex(x)
    轉換成十進制 任意數xxx int(‘xxx’,2) int(‘xxx’,8) int(‘xxx’,16)
  • 浮點數類型(float)

  • 字符串類型(str):用 ""''之間的的字符爲一個字符串。該類型支持 +拼接、*重複運算。用print()輸出,支持轉義字符 \,加參數r屏蔽轉義功能。

  • bool 類型:True、False(首字母大寫)。非0爲True, 0、空字符、空列表、空元組、None都認爲是False。

  • None 類型:類似C語言的NULL,表示一個空值。

運算符

在這裏插入圖片描述

二、 字符編碼

1. 常見的字符編碼

  • ASCII 碼:單字節編碼
  • MBCS 碼:(2字節編碼類),規定如果第一個字節是 \x80 以下,則任然使用ASCII碼;反之,則使用兩個字節表示一個字符。如windows的ANSI碼格式
  • Unicode 碼:所有字符的字符集(UCS-2 兩個字節表示一個字符、UCS-4四個字節表示一個字符,常用USC-2),UCS(Unicode Character Set)僅僅是字符對應碼位的一張表,具體如何傳輸和存儲有UTF(UCS Transformation Format)負責。

直接使用UCS的碼位來保存,這就是UTF-16,由於以前使用ASCII碼錶示英文字符只需要一個字節,而使用UCS-2需要2個字節,空間消耗過大,於是UTF-8出現了。

  • UTF-8 碼:一種可變長的編碼,它把一個Unicode字符根據不同數字大小編碼成1~6個字節。常用的英文字母被編碼成1個字節,漢字通常是3個字節,生僻的字符會被編碼成4 ~ 6個字節。

另外,在計算機內存中,統一使用Unicode編碼,當需要保存到硬盤或者需要傳輸的時候,就轉換爲UTF-8編碼。瀏覽網頁的時候,服務器會把動態生成的Unicode內容轉換爲UTF-8再傳輸到瀏覽器:所以你看到很多網頁的源碼上會有類似如下的信息,表示該網頁正是用的UTF-8編碼。<meta charset="UTF-8"/>

2. 字符編碼的聲明

由於Python源代碼也是一個文本文件,所以,當你的源代碼中包含中文的時候,在保存源代碼時,就需要務必指定保存爲UTF-8編碼。當Python解釋器讀取源代碼時,爲了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行:

#!/usr/bin/python
# -*- coding: utf-8 -*-12
  • 第一行註釋是爲了告訴Linux/OS X系統,這是一個Python可執行程序,Windows系統會忽略這個註釋;
  • 第二行註釋是爲了告訴Python解釋器,按照UTF-8編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會有亂碼。

實際上,python只檢查#、coding和編碼字符串,其它字符串使爲了美觀加上的。其中UTF-8也可以寫成u8 。另外需要注意的是,聲明的編碼需要與文件實際保存的編碼一致,否則可能會出現代碼解析異常。

bytes 類型

Python bytes 類型(由字節表示字符串)。bytes() 函數返回一個新的 bytes 對象,該對象是一個 0 <= x < 256 區間內的整數不可變序列。

字節串(bytes)和字符串(string)的對比:

  • 字符串由若干個字符組成,以字符爲單位進行操作;bytes由若干個字節組成,以字節爲單位進行操作。
  • bytes和字符串除了操作的數據單元不同之外,它們支持的所有方法都基本相同。
  • bytes和字符串都是不可變序列,不能隨意增加和刪除數據。

bytes 只負責以字節序列的形式(二進制形式)來存儲數據,至於這些數據到底表示什麼內容(字符串、數字、圖片、音頻等),完全由程序的解析方式決定。如果採用合適的字符編碼方式(字符集),bytes可以恢復成字符串;反之亦然,字符串也可以轉換成字節串。bytes 只是簡單地記錄內存中的原始數據。

bytes 類型的數據非常適合在互聯網上傳輸,可以用於網絡通信編程,如果字符串想要在網絡上傳輸就必須先轉換成bytes類型;bytes 也可以用來存儲圖片、音頻、視頻等二進制格式的文件。

字符串和 bytes 存在着千絲萬縷的聯繫,我們可以通過字符串來創建 bytes 對象,或者說將字符串轉換成 bytes 對象。有以下三種方法可以達到這個目的:

  • 如果字符串的內容都是 ASCII 字符,那麼直接在字符串前面添加b前綴就可以轉換成 bytes。
  • bytes 是一個類,調用它的構造方法,也就是 bytes(),可以將字符串按照指定的字符集轉換成 bytes;如果不指定字符集,那麼默認採用 UTF-8。
  • 字符串本身有一個 encode() 方法,該方法專門用來將字符串按照指定的字符集轉換成對應的字節串;如果不指定字符集,那麼默認採用 UTF-8。

以下是 bytes() 的語法:

class bytes([source[, encoding[, errors]]])

參數

  • 如果 source 爲整數,則返回一個長度爲 source 的初始化數組;
  • 如果 source 爲字符串,則按照指定的 encoding 將字符串轉換爲字節序列;
  • 如果 source 爲可迭代類型,則元素必須爲[0 ,255] 中的整數;
  • 如果 source 爲與 buffer 接口一致的對象,則此對象也可以被用於初始化 bytearray。
  • 如果沒有輸入任何參數,默認就是初始化數組爲0個元素。

bytes 類型實例

# 以下模擬交互界面
# 使用 b 前綴
>>> btr=b"abc"
>>> type(btr)		#查看btr類型
<class 'bytes'>
>>> btr
b'abc'

# 使用 bytes()函數
>>> a = bytes([1,2,3,4])
>>> a
b'\x01\x02\x03\x04'
>>> type(a)
<class 'bytes'>
# class bytes([source[, encoding[, errors]]])
>>> b = bytes('hello','ascii')
>>> b
b'hello'
>>> type(b)
<class 'bytes'>

# 使用 encode()轉碼 decode()解碼
>>> "我愛學習".encode("utf-8")
b'\xe6\x88\x91\xe7\x88\xb1\xe5\xad\xa6\xe4\xb9\xa0'
>>>b'\xe6\x88\x91\xe7\x88\xb1\xe5\xad\xa6\xe4\xb9\xa0'.decode("UTF-8")
'我愛學習'

# gbk雙字節編碼,包含全部中文字符
>>> str = "我愛學習".encode("gbk")
>>> str
b'\xce\xd2\xb0\xae\xd1\xa7\xcf\xb0'
>>> str.decode("gbk")
'我愛學習'

查看字符對應的Unicode碼(Ascii碼)
# 以下模擬交互界面
# 使用 ord() 查看字符編碼(Ascii或Unicode)
# chr()用一個範圍在 range(256)內的(就是0~255)整數作參數,返回一個對應的字符
# unichr(),與chr()函數功能基本一樣, 只不過是返回 unicode 的字符
>>> ord("我")
25105
>>> chr(25105)
'我'

# 查看當前所採用的編碼標椎
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'

與編碼相關的方法:

 
import sys
import locale
 
def p(f):
    print('%s.%s(): %s' % (f.__module__, f.__name__, f()) )
 
# 返回當前系統所使用的默認字符編碼
p(sys.getdefaultencoding)
 
# 返回用於轉換Unicode文件名至系統文件名所使用的編碼
p(sys.getfilesystemencoding)
 
# 獲取默認的區域設置並返回元祖(語言, 編碼)
p(locale.getdefaultlocale)
 
# 返回用戶設定的文本數據編碼
# 文檔提到this function only returns a guess
p(locale.getpreferredencoding)
 
# \xba\xba是'漢'的GBK編碼
# mbcs是不推薦使用的編碼,這裏僅作測試表明爲什麼不應該用
print(r"'\xba\xba'.decode('mbcs'):", repr('\xba\xba'.decode('mbcs')) )
 
#Windows上的結果(區域設置爲中文(簡體, 中國))
sys.getdefaultencoding(): utf-8
sys.getfilesystemencoding(): utf-8
locale.getdefaultlocale(): ('zh_CN', 'cp936')
locale.getpreferredencoding(): cp936'

編碼部分參考博客:Python字符編碼詳解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章