C語言老司機學Python (二)
標準數據類型:
共6種:Number(數字),String(字符串),List(列表),Tuple(元組),Sets(集合),Dictionary(字典)
本次學習主要是和數據類型混個臉熟,知道每樣東西幹什麽的,有什麽特點。具體用法和數據類型的方法,查工具書就行。
排好隊,一個一個來。
數字:
比C簡單的多,數字只有4種類型,分別是 int, float, bool, complex,納尼?還有復數。
int就是長整型,沒有c裏面的短整型一說。看到了吧,隨著計算機硬件的強大,過去無比寶貴的內存資源已經不稀罕了,怎麽對程序員方便友好怎麽來,這也是現代語言的一個基本設計思想。
用type()和isinstance()都可以得知某個變量所指向的對象的類型。區別是,type()比較死腦筋,但是isinstance()會認為子類是一種父類類型。即:isinstance(子類型) == 父類型 會返回True
既然提到了True和False,就說一下,Python3裏,True和False是關鍵字,值分別是1和0。你可以試著print(True+1),結果是2。
數值運算符方面,大部分和c很像,少部分的不一樣,確切的說,是更便利了。比如2/4的結果是0.5,Python會自動按浮點數計算。這樣寫在c裏面就等於0了,要想得到0.5還得強制轉換類型。那麽,如果就是要取整怎麽辦,可以寫成 2//4,結果是0。 //作為運算符,也決定了不能像c裏面一樣用它做單行註釋。
乘方是 a**b,不需要像c一樣調用另外的函數庫。
字符串:
字符串用單引號(‘)或雙引號(")括起來。我喜歡單引號,因為不用按shift,便捷高效。
按照老規矩, \表示轉義,如果在字符串前加大寫或者小寫的R,就不再轉義。
字符串連接用+號,復制字符串N次用*號。
字符串截取用 變量[下標1,下標2]的形式,下標索引從0開始,末尾位置記為-1,是個左閉右開的區間,[ )。
示例速查:
str = ‘Runoob‘
print (str) # 輸出字符串 Runoob
print (str[0:-1]) # 輸出第一個到倒數第二個的所有字符 Runoo
print (str[0]) # 輸出字符串第一個字符 R
print (str[2:5]) # 輸出從第三個開始到第五個的字符 noo
print (str[2:]) # 輸出從第三個開始的後的所有字符 noob
print (str * 2) # 輸出字符串兩次 RunoobRunoob
print (str + "TEST") # 連接字符串 RunoobTEST
不能給字符串中的單個字符賦值, str[1]=‘a‘會出錯。
另外,Python沒有c語言的字符類型char。
完全可以理解。之前說了,什麽時代了,還省啥內存啊,怎麽方便怎麽來。
列表:
列表的定義是 listA = [x, xx,xxx] ,方括號包起,逗號隔開,乍看起來像c語言裏的數組,但其實不一樣。從append()、pop()等方法來看,又像是java裏面的數組。我姑且認為Python裏面的列表是一種混合動力加強版的數組吧,可操縱性簡直逆天。看例子:
list = [ ‘abcd‘, 786 , 2.23, ‘runoob‘, 70.2 ]
tinylist = [123, ‘runoob‘]
print (list) # 輸出完整列表 [‘abcd‘, 786, 2.23, ‘runoob‘, 70.2]
print (list[0]) # 輸出列表第一個元素 abcd
print (list[1:3]) # 從第二個開始輸出到第三個元素 [786, 2.23]
print (list[2:]) # 輸出從第三個元素開始的所有元素 [2.23, ‘runoob‘, 70.2]
print (tinylist * 2) # 輸出兩次列表 [123, ‘runoob‘, 123, ‘runoob‘]
print (list + tinylist) # 連接列表 [‘abcd‘, 786, 2.23, ‘runoob‘, 70.2, 123, ‘runoob‘]
和字符串不能改變其中的元素不同,列表裏面的可以改,而且簡直是隨便改,不要太方便。
a = [9, 2, 13, 14, 15, 6]
a[2:5] = [] # 將對應的元素值設置為 []
print(a) # 結果是 [9, 2, 6]
元組(Tuple)
此物老夫從未見過。特地去搜索了一下,Tuple這個詞似乎是Python特有的,不像list之類的詞在生活中還有別的含義。只好認真看教程了。
教程裏解釋:
元組寫在小括號(())裏,元素之間用逗號隔開,只有一個元素時,唯一的元素後面要加逗號。
元組(tuple)與列表類似,不同之處在於元組的元素不能修改。
類似列表?行了,翻頁。
集合:
存放無序不重復元素的序列,用於進行成員關系測試和刪除重復元素。
重點:1)無序;2)不重復。
用{}或者 set() 函數創建集合。 setA = {‘hatemath‘} 或者 setA = set(‘hatemath‘)
註意:創建一個空集合必須用 set() 而不是 { },因為 { } 是用來創建一個空字典。
常見集合運算有:並集 |, 差集 - ,交集&, 不同時存在的元素集 ^ (按我理解就是並集減去交集)
例子:
a = set(‘hate‘)
b = set(‘math‘)
print(a | b) # {‘t‘, ‘m‘, ‘a‘, ‘e‘, ‘h‘}
print(a - b) # {‘e‘}
print(a & b) # {‘a‘, ‘t‘, ‘h‘}
print(a ^ b) # {‘m‘, ‘e‘}
print( (a | b) - (a & b)) # {‘e‘, ‘m‘} 果然就是我理解的意思。
集合,很好很強大。再見。
肚子餓了。。。15年前初學編程的時候,經常去計算中心上機,為了debug經常錯過飯點,而且把零錢用光了。下機後跑去跟老板賒賬吃飯(此處應該有個笑哭的表情)。過了這麽多年還是喜歡編程,看來是真愛。
也有可能是因為我沒把它當做謀生的手段。
字典:
字典是無序對象的集合,其中的元素時通過鍵(key)來存取的,取出來的叫值(value)。眼熟!java裏面有這個玩意。我發現學這些高級特性的時候,跟c基本沒啥關系了。。。。
既然是熟人,就直接看例子吧。
dict = {}
dict[‘one‘] = "1 - 菜鳥教程"
dict[2] = "2 - 菜鳥工具"
tinydict = {‘name‘: ‘runoob‘,‘code‘:1, ‘site‘: ‘www.runoob.com‘}
print (dict[‘one‘]) # 輸出鍵為 ‘one‘ 的值 1 - 菜鳥教程
print (dict[2]) # 輸出鍵為 2 的值 2 - 菜鳥工具
print (tinydict) # 輸出完整的字典 {‘name‘: ‘runoob‘, ‘site‘: ‘www.runoob.com‘, ‘code‘: 1}
print (tinydict.keys()) # 輸出所有鍵 dict_keys([‘name‘, ‘site‘, ‘code‘])
print (tinydict.values()) # 輸出所有值 dict_values([‘runoob‘, ‘www.runoob.com‘, 1])
C語言老司機學Python (二)