Python 語言學習 第一篇:資料型別(數字,集合,布林型別,操作符)
Python語言最常用的物件是變數和常量,常量的值是字面意思,變數的值是可變的,例如,123,"上海"是常量,而a=1,a=2,其中a是變數名。內建的核心資料型別有:數字、字串、列表、字典、元組、檔案、集合、None和布林型別。Python是強型別的語言,變數的資料型別是由初始化的常量來指定的,其型別根據賦值是可變的,這就是Python的動態型別模型。
一,變數的動態型別
在Python中,型別是在執行過程中動態決定的,而不是通過程式碼宣告的,這意味著沒有必要事先宣告變數。
當在Python中執行賦值語句:a = 3 時,Python自動把a作為整數物件來使用。變數名不和型別關聯,變數名只不過是物件的一個引用而已,資料型別是和物件相關聯的。當變量出現在表示式中時,它會馬上被當前引用的物件所代替。
總之,變數在賦值的時候建立,可以引用任何資料型別的物件,並且必須在初始化之後才能引用。
二,數字型別
Python的數字型別包括:整數、浮點數和複數
- 整數 :在Python3.0中支援無窮精度的整數,可以通過內建函式int(n)來建立整數,整數是精確的,
- 浮點數 :類似於C語言中的雙精度,可以通過內建函式float(n)來建立浮點數,浮點數可能存在誤差,
- 複數 :虛部以j或J結尾,可以通過內建函式complex(real,image)來建立複數
- 二進位制,八進位制和十六進位制 :可以通過內建函式bin(n),oct(n),hex(n)來分別建立二進位制數,八進位制數和十六進位制數
1,基數為2,8和16的整數
二進位制,八進位制和十六進位制只能表示整數:
- 二進位制(binary):以0b或0B開頭,後面接0-1的數字
- 八進位制(octal):以0o或0O開頭,後面接0-7的數字,
- 十六進位制(hex ):以0x或0X開頭,後面接十六進位制的數字0-9和A-F,字元編寫成大寫或小寫都行
各個進位制的常量表示:
- 常量0o10 是指十進位制的8,使用oct(8)來表示
- 常量0b10是指十進位制的2,使用bin(2)來表示
- 常量ox10是指十進位制的16,使用hex(16)來表示
2,除法
Floor除法是指:把結果向小舍入到最近的整數,例如,小於2.5最小的整數是2,小於-2.5最小的整數是-3
>>> import math >>> math.floor(2.5) 2 >>> math.floor(-2.5) -3
在Python 2.6 版本中:
/ 表示傳統除法:如果兩個運算元都是整數型別,執行截斷的整數除法,返回的結果是整數;如果任意一個運算元是浮點數,則返回小數。
// 表示Floor除法:總是截斷餘數,當兩個運算元都是整數時,結果是整數(n);如果有任何一個運算元是浮點型別,則返回一個浮點數(n.0)。
在Python 3.0 版本中:
/ 表示真除法:不管運算元的型別,都返回包含小數的結果;
// 表示Floor除法:對於整數執行截斷除法,對於浮點數執行浮點除法。
例如,在Python 3.0 版本中:
>>> 5//2.0 2.0 >>> 5//-2.0 -3.0
3,位操作
把整數當作二進位制位串來對待,使用位操作符進行位移操作
>>> x=1#0b0001 >>> x<<2 4 >>> x|2 3 >>> x&1 1
4,內建的數學工具
匯入內建的math模組,常用的數學工具:
- pow(a,b),求a的b次冪
- round(seed):求隨機數
- math.sqrt(x),求x的平方根
- math.floor(x):向下取最小的整數
- math.trunc(x):截斷小數點,保留整數
5,精確小數
精確小數是有固定精度的浮點數,通常情況下,浮點數缺乏精確性,這是因為用來儲存數值的空間有限,例如,下面的計算應該得到0,但是結果卻沒有等於0,而是結果接近於0:
>>> 0.1+0.1+0.1-0.3 5.551115123125783e-17
不過使用精確小數,結果能夠修正:
>>> from decimal import Decimal >>> Decimal('0.1') + Decimal('0.1') - Decimal('0.2') Decimal('0.0')
設定精確小數物件的精度:
decimal.getcontext().prec = 4
6,分數
分數是指帶有分子和分母的表示式,分數 1/2的表示方法是:
>>> from fractions import Fraction >>> x=Fraction(1,2)
三,集合
集合(set)是一些唯一的、不可變的物件的無序集合,這些物件支援集合操作。集合的特點是:
- 根據定義,一個項(元素,item)在集合中只能出現一次,不管把它新增多少次。
- 集合是無序的
1,建立集合
集合的三種定義方式,使用內建函式set建立集合
>>> set([1,2,3,4]) {1, 2, 3, 4} >>> set('abcd') {'d', 'b', 'a', 'c'}
或者使用大括號建立集合:
>>> {1,2,3,4} {1, 2, 3, 4}
2,集合操作
in :項是否存在於集合中
>>> x={1,2,3,4} >>> 1 in x True
- :集合的差集
>>> y={2,3,4,5} >>> x-y {1}
|:集合的交集,等價於x.union(y)
>>> x|y# x.union(y) {1, 2, 3, 4, 5}
&:集合的並集,等價於 x.intersection(y)
>>> x&y# x.intersection(y) {2, 3, 4}
^:集合的異或
>>> x ^ y {1, 5}
>, < :集合的子集,等價於x.issubset(y)
>>> x<y,x>y#x.issubset(y), y.issubset(x) (False, False)
3,集合的修改
add()用於新增集合元素,remove()用於移除集合元素,update()用於歸併集合元素
>>> x.add(6) >>> x {1, 2, 3, 4, 6} >>> x.remove(1) >>> x {2, 3, 4, 6} >>> x.update({2,5}) >>> x {2, 3, 4, 5, 6}
四,布林型別
bool資料型別的值是:True和False,顯示的是True和False,其行為跟整數1和0是相同的。
布林型別常用於條件表示式中,用於控制迴圈結構和分支結構。
對於bool值可以進行邏輯運算(and,or,not):
五,空值
空值是Python裡一個特殊的值,用None表示。None不能理解為0,因為0是有意義的,而None是一個特殊的空值。
六,操作符
特殊的操作符
- = :賦值
- == :相等
- != :不等
- is :檢查物件的同一性,如果兩個變數名指向同一個物件,返回True
1,邏輯運算子
- and :邏輯與
- or :邏輯或
- not :邏輯非
2,邏輯表示式
- >,<,>=,<= :大於,小於,大於或等於,小於或等於
- ==:相等
- !=:不等
3,算術操作符
- + :加
- - :減
- * :乘
- ** :冪乘,例如,a**b,是指a的b次方
- / :除,在Python3.0中,是真除法,無論任何型別都會保持小數部分
- // :Floor除法,省略掉結果的小數部分
- % :求模
4,位運算子
- & :按位與
- | :按位或
- ^ :異或
5,移位符
- << :向左移位
- >> :向右移位