Python的常用内置對象
對象是python語言中最基本的概念,在python中處理的一切都是對象。
表1: Python的内置對象
對 象 類 型 | 類型名稱 | 示例 | 簡要說明 |
---|---|---|---|
數字 | int, float, complex | 1234, 3.14, 1.3e5, 3+4j | 數字大小沒有限制,内置支援複數及其 運算 |
字元串 | str | str ‘swfu’, “I’m student”, ‘’‘Python ‘’’, r’abc’, R’bcd’ | 使用單引号、雙引号、三引号作為定界 符,以字母r或R引導的表示原始字元串 |
位元組串 | bytes | b’hello world’ | 以字母b引導,可以使用單引号、雙引 号、三引号作為定界符 |
列 表 | list | [1, 2, 3],[‘a’, ‘b’, [‘c’, 2]] | 所有元素放在一對方括号中,元素之間 使用逗号分隔,其中的元素可以是任意 類型 |
字 典 | dict | {1:‘food’ ,2:‘taste’, 3:‘import’} | 所有元素放在一對大括号中,元素之間 使用逗号分隔,元素形式為“鍵:值” |
元 組 | tuple | (2, -5, 6), (3,) | 不可變,所有元素放在一對圓括号中, 元素之間使用逗号分隔,如果元組中隻 有一個元素的話,後面的逗号不能省略 |
集 合 | set | frozenset {‘a’, ‘b’, ‘c’} | 所有元素放在一對大括号中,元素之間 使用逗号分隔,元素不允許重複;另外, set是可變的,而frozenset是不可變的 |
布 爾 型 | bool | True, False | 邏輯值,關系運算符、成員測試運算 符、同一性測試運算符組成的表達式的 值一般為True或False |
空 類 型 | NoneType | None | 空值 |
異 常 | Exception、 ValueError、 TypeError…… | Python内置大量異常類,分别對應不同 類型的異常 | |
文 件 | f = open(‘data.dat’, ‘rb’) | open是Python内置函數,使用指定的 模式打開檔案,傳回檔案對象 | |
其 他 可 疊 代 對 象 | 生成器對象、range對象、 zip對象、enumerate對象、map對象、filter對象 等 | 具有惰性求值的特點 | |
程式設計單元 | 函數(使用def定義) 類 (使用class定義) 子產品 (類型為module) | 類和函數都屬于可調用對象,子產品用來集中存放函數、類、常量或其他對象 |
python中有許多内置對象可供程式設計者使用,内置對象可直接使用,如數字、字元串、清單、del等;
Python變量
Python屬于強類型程式設計語言,Python解釋器會根據指派或運算來自動推斷變量類型。Python還是一種動态類型語言,變量的類型也是可以随時變化的。
需要注意以下問題。
- 變量名必須以字母或下畫線開頭但以下畫線 開頭的變量在Python中有特殊含義,請參考第6章内容。
- 變量名中不能有空格或标點符号(括号、引号、逗号、斜線、反斜線、冒号、句号、問等)。
- 不能使用關鍵字作為變量名,Python關鍵字的介紹請見2.3節。要注意的是,直着Python版本的變 化,關鍵字清單可能會有所變化。
- 不建議使用系統内置的子產品名、類型名或函數名以及已導人的子產品名及其成員作為變量名,這會 改變其類型和含義,甚至會導緻其他代碼無法正常執行。可以通過difr(_ _ builtins_ _ )檢視所有 内置對象名稱。
- 變量名對英文字母的大小寫敏感,例如student和Student是不同的變量
>>> x = 4
>>> print(type(x))
<class 'int'>
>>> x = 'Hello world.'
>>> print(type(x)) #檢視變量類型
<class 'str'>
>>> x = [1,2,3]
>>> print(type(x))
<class 'list'>
>>> isinstance(3, int) #測試對象是否是某個類型的執行個體
True
>>> isinstance('Hello world', str)
True
>>> x = 3
>>> x
3
>>> x**2
9
字元串和元組屬于不可變序列,不能通過下标的方式來修改其中的元素值,試圖修改元組中元素的值時會抛出異常。
在Python中,允許多個變量指向同一個值 。
x = 3
y = 3
x += 6
記憶體變化如下:
- 指派語句的執行過程是:首先把等号右側表達式的值計算出來,然後在記憶體中尋找一個位置把值存放進去,最後建立變量并指向這個記憶體位址。
- Python采用的是基于值的記憶體管理方式,如果為不同變量指派為相同值,這個值在記憶體中隻有一份,多個變量指向同一塊記憶體位址。 Python中的變量并不直接存儲值,而是存儲了值的記憶體位址或者引用,這也是變量類型随時可以改變的原因。
- Python具有自動記憶體管理功能,對于沒有任何變量指向的值,Python自動将其删除。Python會跟蹤所有的值,并自動删除不再有變量指向的值。盡管如此,顯式使用
指令删除不需要的值或顯式關閉不再需要通路的資源,仍是一個好的習慣,同時也是一個優秀程式員的基本素養之一。del
數字
數字是不可變對象,可以表示任意大小的數字。
>>> 999*99 #想乘
98901
>>> 999**99 #幂運算,等價于内置函數pow()
905697844958667709741956562802753100901389806139609538815019658231017504097064752403846139892968390554024852396172082441213697329994395340901282449426848216146865935961454742677324005498146550510264840271813301125214581059267630055862747172378231729576039278689152963667155086263379780844149098999
>>> 0.3+0.2
0.5
>>> 0.5-0.2
0.3
0.4-0.1 #實數相減,結果稍有偏差
0.30000000000000004
Python中的整數類型可以分為
- 十進制整數如,0、-1、9、123
- 十六進制整數,需要16個數字0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f來表示整數,必須以
開頭,如0x
、0x10
、0xfa
0xabcdef
- 八進制整數,隻需要8個數字0、1、2、3、4、5、6、7來表示整數,必須以
開頭,如0o
、0o35
0o11
- 二進制整數,隻需要2個數字0、1來表示整數,必須以
開頭如,0b
、0b101
0b100
浮點數又稱小數
15.2, 0.31, 3.14, -11.2
Python 3.6.x開始支援在數字中間位置使用單個下劃線作為分隔來提高數字的可讀性,類似于數學上使用逗号作為千位分隔符。
>>> 1_000_000
1000000
>>> 1_2_3_4
1234
>>> 3.14159_26535_89793_83246
3.14159265358979383246
字元串
- 用單引号、雙引号或三引号界定的符号系列稱為字元串。
- 單引号、雙引号、三單引号、三雙引号可以互相嵌套,用來表示複雜字元串 ‘abc’、‘123’、“Python”、’’’ Tom said, “Let’s go” ‘’’。
- 字元串屬于不可變序列。
- 空字元串表示為’'或 “”。
- 三引号’’'或"""表示的字元串可以換行,支援排版較為複雜的字元串;三引号還可以在程式中表示較長的注釋。
常見的轉義字元
表2: 轉義字元
轉義字元 | 含義 | 轉義字元 | 含義 |
---|---|---|---|
\b | 倒退,把光标移動到前一列位置 | \ | 一個斜線\ |
\f | 換頁符 | \’ | 單引号’ |
\n | 換行符 | \” | 雙引号” |
\r | 回車 | | 3位八進制數對應的字元 |
\t | 水準制表符 | | 2位十六進制數對應的字元 |
\v | 垂直制表符 | | 4位十六進制數表示的Unicode字元 |
Python運算符
表3: Python 運算符
運算符 | 功能說明 |
---|---|
+ | 算術加法,清單,元組,字元串合并與連接配接,正号 |
- | 算術減法,集合差集,相反數 |
* | 算術乘法,序列重複 |
/ | 真除法 |
// | 求整商,但如果操作數中有實數的話,結果為實數形式的整數 |
% | 求餘數,字元串格式化 |
** | 幂運算 |
<,<=,>,>=,==,!= | (值)大小比較,集合的包含關系比較 |
or | 邏輯或 |
and | 邏輯與 |
not | 邏輯非 |
in | 成員測試 |
is | 對象同一性測試,即測試是否為同一個對象或者記憶體位址是否相同 |
|,^,&,<<,>>,~ | 位或,位異或,位與,左移位,右移位,位求反 |
&,|,^ | 集合交集,并集,對稱差集 |
@ | 矩陣相乘運算符 |
Python關鍵字簡要說明
表4: 關鍵字
關鍵字 | 含義 |
---|---|
False | 常量,邏輯假 |
None | 常量,空置 |
True | 常量,邏輯假 |
and | 邏輯與運算 |
as | 在import或except語句中給對象器别名 |
assert | 斷言,用來确認某個條件必須滿足,可以來幫助調試程式 |
break | 用來循環中,提前結束break所在層次的循環 |
class | 用來定義類 |
continue | 用在循環中,提前結束本次循環 |
def | 用來定義函數 |
del | 用來删除對象或對象成員 |
elif | 用在選擇結構中,表示else if 的意思 |
else | 可以用在選擇結構、循環結構和異常處理結構中 |
except | 用在異常處理結構中,用來捕獲特定類型的異常 |
finally | 用在異常處理結構中,用來表示不論是否發生異常都會執行的代碼 |
for | 構造for循環,用來疊代序列或可疊代對象中的所有元素 |
from | 明确指定從哪個子產品中導入什麼對象,例如from math import sin;還可以與 yield 一起構成 yield表達式 |
global | 定義或聲明全局變量 |
if | 用在選擇結構中 |
import | 用來導入子產品或子產品中的對象 |
in | 成員測試 |
is | 同一性測試 |
lambda | 用來定義lambda表達式,類似于函數(匿名函數) |
nonlocal | 用來聲明nonlocal變量 |
not | 邏輯非運算 |
or | 邏輯或運算 |
pass | 空語句,執行該語句時什麼都不做,常用作占位符 |
raise | 用來顯式抛出異常 |
return | 在函數中用來傳回值,如果沒有指定傳回值,表示傳回空值None |
try | 在異常處理結構中用來限定可能會引發異常的代碼塊 |
while | 用來構造while循環結構,隻要條件表達式等價于True就重複執行限定的代碼塊 |
with | 上下文管理,具有自動管理資源的功能 |
yield | 在生成器行數中用來傳回值 |