#6 Python數據類型及運算

前言

前文講述了Python的輸入輸出以及變量的相關知識點,本節將探討Python的數據類型以及數據之間的運算方式!python

1、Python數據類型

上一節弄清了變量,其實變量所指向的值是有本身獨特的數據類型的,這些數據類型可能表明不一樣的數據,在Python中,主要有如下幾種數據類型:數組

整形(int)

在計算機中,整數的位數實際上是有範圍的,並無咱們想象的那樣擁有無限的位數,並且,在不一樣的機器上整數的位數可能不一樣,例如:函數

32位系統:整數的位數就是32位,尋址範圍爲:-231  ~  231-1 ,即-2147483648 ~ 2147483647測試

64位系統:整數的位數就是64位,尋址範圍爲:-263 ~ 263-1 ,即-9223372036854775808 ~ 9223372036854775807spa

長整形(long)

在Python中,長整形整數並無指定位數,也就是說,長整形整數能夠無限大,可是因爲機器自己的限制,每每並不能無限大,到必定範圍也就不行了。code

浮點型(float)

上面兩種數據類型都是整數,但在實際並不可能全是整數,還有小數啊,因而浮點型便應運而生,說白了浮點型就是小數,而且可使用科學計數,在計算機中,科學計數的倍數10用e代替,如:5.21x105 就寫成 5.21e9,也能夠寫成521e7對象

複數(complex)

上面三種數據類型組合起來是實數,其實科學計算中經常用到複數,在Python中,存在複數的數據類型,通常形式爲:x+yj,式中x,y都是實數,例如:5+6jblog

布爾值(True、False)

布爾值就倆:真、假,Python中用True、False表示,必定要注意首字母大寫,Python中是區分大小寫的,必定要注意。ip

In [77]: 5==6
Out[77]: False

In [78]: 3>2
Out[78]: True

In [79]: True == True
Out[79]: True

In [80]: True == False
Out[80]: False

空值(None)

空值就一個:None,這個空值是頗有趣的,None不能夠理解爲0,由於0不是空值,就好像溫度是0攝氏度同樣,0攝氏度是有溫度的( ̄▽ ̄)"字符串

字符串(str)

字符串多是編寫Python中用到的最多的數據類型,只要是用引號引發來的就是字符串。Python中是不區分單引號、雙引號和三引號的,他們是相同的:

In [81]: 'Hello,world!'
Out[81]: 'Hello,world!'

In [82]: "Hello,world!"
Out[82]: 'Hello,world!'

In [83]: '''Hello,world'''
Out[83]: 'Hello,world'

確定有萌新會問,搞這麼多幺蛾子幹啥,統一用一個不就完了,我就默默笑笑不說話:

In [84]: 'i'm MinuteSheep'
  File "<ipython-input-84-a2a810ee38cb>", line 1
    'i'm MinuteSheep'
       ^
SyntaxError: invalid syntax

看!報錯了居然,爲何呢?由於Python會自動匹配最近的符號與之閉合,因此就會出現上面的狀況,作以下修改:

In [85]: "i'm MinuteSheep"
Out[85]: "i'm MinuteSheep"

(萌新:你個糟老頭子壞得很╰(‵□′)╯)

一樣的,三引號用於多行,或者內容符號混亂的狀況:

In [87]: '''i'm MinuteSheep,i said:"i'm the best man in the world!"'''
Out[87]: 'i\'m MinuteSheep,i said:"i\'m the best man in the world!"'


In [86]: '''
    ...: i'm MinuteSheep,
    ...: i said:
    ...: "i'm the best man in the world!"
    ...: '''
Out[86]: '\ni\'m MinuteSheep,\ni said:\n"i\'m the best man in the world!"\n'

完美解決,還記得\n是什麼嗎,是換行意思的啦,一樣你會發現i'm變成了i\'m,這實際上是轉義的顯示,轉義之後會講到的啦

又有萌新出來做妖了,你上一節不是說三引號是多行註釋嗎,這一節怎麼變成了字符串啦?

這個問題問的好!看個人解釋,有圖有真相:

直接三引號內容,是註釋,只要將三引號內容賦給變量,就是字符串

字符串還有不少方法,以後會專門有一小節詳細的講解字符串的方法。

列表(list)

對於列表,萌新可能會很陌生,你能夠暫時把它理解爲一維數組,列表的在Python中的使用次數也是至關多的,是除字符串之外必須掌握的一種數據類型。來看看列表長啥樣:

In [88]: ['MinuteSheep', 'LiMing', '123', 123]
Out[88]: ['MinuteSheep', 'LiMing', '123', 123]

能夠看到,被一對方括號括起來的數據就是列表,劉表裏面能夠又其餘數據類型,上面的列表包括:字符串和整型。固然,列表能夠包含列表,稱爲列表的嵌套:

In [89]: ['MinuteSheep', ['LiMing', 123]]
Out[89]: ['MinuteSheep', ['LiMing', 123]]

關於列表,還有好多具體的方法,這裏不一一介紹,以後也會有專門的一小節講解列表方法。

元組(tuple)

元組可能就更陌生了,元組實際上是不可變列表,列表用一隊方括號括起來,元組則用一對圓括號括起來,列表是能夠被操做的(好比增、刪、改、查),可是元組不行,元組不可被更改,來看看元組長啥樣哇:

In [90]: ('MinuteSheep','LiMing',123)
Out[90]: ('MinuteSheep', 'LiMing', 123)

字典(dict)

字典是Python的一種很是強大的數據類型,經過鍵值對的形式將數據保存下來,提升了數據增、刪、改、查的速度,一般做爲數據存儲的格式,也來看看字典長啥樣哇:

In [91]: {'name': 'MinuteSheep', 'gender' : 'male', 'age': 99}
Out[91]: {'age': 99, 'gender': 'male', 'name': 'MinuteSheep'}

能夠看到,字典是用一對花括號括起來的,而且以 'key' : 'value' 的形式存儲,一樣,字典裏面能夠包含其餘數據類型,上面的字典包括:字符串、整型。固然,字典也能夠嵌套:

In [92]: {'name' : 'MinuteSheep', 'age': {'young' : 15, 'old' : 99}}
Out[92]: {'age': {'old': 99, 'young': 15}, 'name': 'MinuteSheep'}

字典也會有專門的一節去講解它的方法。

2、Python數據運算

說完了Python的數據類型,就該數據運算了,養兵千日,用在一時嘛

算數運算

加 +

In [93]: 1+2
Out[93]: 3

減 -

In [95]: 1-2
Out[95]: -1

乘 *

In [96]: 1*2
Out[96]: 2

除 /

In [97]: 5/2
Out[97]: 2.5

取模 %  (就是取餘數)

In [98]: 5%2
Out[98]: 1

取整 //

In [99]: 5//2
Out[99]: 2

冪 **

In [100]: 5**2
Out[100]: 25

賦值運算

簡單賦值 =

In [102]: a=5

In [103]: b=6

In [104]: c=a+b

In [105]: c
Out[105]: 11

加法賦值 +=   (b+=a,至關於b=b+a)

In [106]: a=5

In [107]: b=6

In [108]: b+=a

In [109]: b
Out[109]: 11

減法賦值 -=   (b-=a,至關於b=b-a)

In [111]: a=5

In [112]: b=6

In [113]: b-=a

In [114]: b
Out[114]: 1

乘法賦值 *=   (b*=a,至關於b=b*a)

In [115]: a=5

In [116]: b=6

In [117]: b*=a

In [118]: b
Out[118]: 30

除法賦值 /=   (b/=a,至關於b=b/a)

In [119]: a=5

In [120]: b=6

In [121]: b/=a

In [122]: b
Out[122]: 1.2

取模賦值 %=   (b%=a,至關於b=b%a)

In [123]: a=5

In [124]: b=6

In [125]: b%=a

In [126]: b
Out[126]: 1

取整賦值 //=   (b//=a,至關於b=b//a)

In [127]: a=5

In [128]: b=6

In [129]: b//=a

In [130]: b
Out[130]: 1

冪賦值 **=   (b**=a,至關於b=b**a)

In [131]: a=5

In [132]: b=6

In [133]: b**=a

In [134]: b
Out[134]: 7776

比較運算

測試相等 ==

In [136]: 1==1
Out[136]: True

In [137]: 1==2
Out[137]: False

不等於 !=

In [144]: 1!=1
Out[144]: False

In [145]: 1!=2
Out[145]: True

大於 >

In [146]: 1>1
Out[146]: False

In [147]: 2>1
Out[147]: True

大於等於 >=

In [149]: 1>=1
Out[149]: True

In [150]: 2>=1
Out[150]: True

小於 <

In [151]: 6<6
Out[151]: False

In [152]: 6<7
Out[152]: True

小於等於 <=

In [153]: 6<=6
Out[153]: True

In [154]: 6<=7
Out[154]: True

邏輯運算

布爾'與' and   (有假爲假,全真爲真)

In [156]: True and False
Out[156]: False

In [157]: True and True
Out[157]: True

In [158]: False and False
Out[158]: False

布爾'或' or   (有真爲真,全假爲假)

In [159]: True or True
Out[159]: True

In [160]: True or False
Out[160]: True

In [161]: False and False
Out[161]: False

布爾'非' not   (取相反)

In [162]: not True
Out[162]: False

In [163]: not False
Out[163]: True

身份運算

判斷兩個標識符是否引用自同一個對象 is

In [167]: a=b=3

In [168]: a is b
Out[168]: True

In [169]: a=3

In [170]: b=5

In [171]: a is b
Out[171]: False

判斷兩個標識符是否引用自不一樣對象 is not

In [177]: a=3

In [178]: b=5

In [179]: a is not b
Out[179]: True

== 與 is 的區別:

看到這裏,不少小夥伴已經暈了,== 和 is 好像同樣啊,看起來同樣,實際上是不同的,來看下面的這段代碼:

In [180]: a = 600

In [181]: b = 600

In [182]: a == b
Out[182]: True

In [183]: a is b
Out[183]: False

其實啊,== 比較的是值,is比較的地址,讓咱們用 id() 這個函數查看一下變量的地址:

In [184]: id(a)
Out[184]: 2155434581648

In [185]: id(b)
Out[185]: 2155434581904

能夠看到,a和b倆個變量的值雖然相同,但地址卻不同,因此使用 == 和 is 的結果天然就不同。那咱們再來看一段代碼:

In [187]: a = 10

In [188]: b = 10

In [189]: a == b
Out[189]: True

In [190]: a is b
Out[190]: True

In [191]: id(a)
Out[191]: 1529742064

In [192]: id(b)
Out[192]: 1529742064

萌新是否是莫不着頭腦了,用600的時候 is 輸出False,用10的時候怎麼地址同樣了啊,(快回頭,有鬼~)其實啊,Python有一個叫作小整數對象池的東西,只要是[-5, 256]之間的整數都會使用同一份地址,這下萌新明白了哇。

位運算

重點說明:位運算針對的是二進制數

按位與 &

In [193]: a = 15   # 15 = 0000 1111

In [194]: b = 30   # 30 = 0001 1110

In [195]: c = a&b  # 14 = 0000 1110

In [196]: c
Out[196]: 14

按位或 |

In [193]: a = 15   # 15 = 0000 1111

In [194]: b = 30   # 30 = 0001 1110

In [197]: c = a|b  # 31 = 0001 1111

In [198]: c
Out[198]: 31

按位異或 ^

In [193]: a = 15   # 15 = 0000 1111

In [194]: b = 30   # 30 = 0001 1110

In [200]: c = a^b  # 17 = 0001 0001

In [201]: c
Out[201]: 17

按位取反 ~

In [210]: a = 60   # 60 = 0011 1100

In [211]: c = ~a  # -61 = 1100 0011

In [212]: c
Out[212]: -61

左移 <<

In [213]: a = 15   # 15 = 0000 1111

In [214]: c = a<<2 # 60 = 0011 1100

In [215]: c
Out[215]: 60

#左移後面要加位數

右移 >>

In [213]: a = 15     # 15 = 0000 1111

In [218]: c = a>>2    # 3 = 0000 0011
 
In [219]: c
Out[219]: 3


#右移後面要加位數

Python運算符優先級(從高到底依次排列)

**                 # 指數 (最高優先級)
~ + -              # 按位翻轉, 一元加號和減號 (最後兩個的方法名爲 +@ 和 -@)
* / % //           # 乘,除,取模和取整除
+ -                # 加法減法
>> <<              # 右移,左移運算符
&                  # 位 'AND'
^ |                # 位運算符
<= < > >=          # 比較運算符
<> == !=           # 等於運算符
= %= /= //= -= += *= **=    # 賦值運算符
is is not          # 身份運算符
in not in          # 成員運算符
not and or         # 邏輯運算符
相關文章
相關標籤/搜索