全書共分16章,對Python內部工作原理進行了一定深度的剖析,99%以上的案例代碼使用Python 3.5.1實現,也適用于Python 3.4.x(除少數幾個新特性之外)和版本Python 3.5.2以及Python 3.6.0,極個別案例使用Python 2.7.11實現(同樣適用于其他版本Python 2.7.x,包括的Python2.7.12),適當介紹了Python代碼優化、系統編程和安全編程的有關知識,滿足不同層次讀者的需要。另外,書中通過小提示、小技巧、注意拓展知識等形式介紹了更多的內容,全部內容遠比章節目錄所顯示的要多,需要認真閱讀才能真正領會其中的奧妙。本書適合作為Python程序員的開發指南,也可以作為高等院校計算機專業、軟件工程專業等專業的Python教材,還可以作為Python愛好者的指導用書。
信息量大、案例豐富、實用性強。全書包含近200個案例和上千段代碼,涉及Python基本語法和數據類型,以及GUI、網絡應用、數據庫、密碼學、科學計算與可視化、大數據、圖形圖像處理等多個領域的開發,書中一些代碼進行簡單拼湊就可以滿足實際工作中需要的很多功能。深度與廣度兼顧。剖析Python編程模式,通過小提示、小技巧、注意、拓展知識等形式適當介紹標準庫的工作原理、內置函數的高級用法以及代碼優化和安全編程知識,同時還補充了很多擴展庫的小應用,滿足不同層次讀者需要。語言輕松愉快,寓教于樂。以Python知識和應用為主線,偶爾穿插一點太極拳論、道德經、易經、古詩詞和其他一些文學作品中的名言名句和小故事,部分題目還給出了非常幽默的答案。注釋量大。書中幾乎每段重要代碼都配有相關的注釋,讓讀者能夠在短時間內理解代碼的編寫思路和要點,大幅度縮短閱讀和學習時間。
董付國 副教授。自2000年參加工作以來,先后講授過匯編語言、C/C /C#、Java和Python等多門編程語言,以及計算機組成原理、計算機網絡、數據庫原理、數據結構、操作系統、計算機安全、網絡安全、計算機圖形學、數字圖像處理、游戲策劃等多門課程,出版《Python程序設計》、《Python程序設計基礎》、《Python程序設計(第2版)》系列教材,開發過多套涉及不同領域的管理系統,在國內外高水平學術期刊與會議上40余篇,其中近30篇被EI檢索。學習工作之余的愛好是打太極拳。
目錄
第1章Python基礎1
1.1Python是一種什么樣的語言1
1.2Python開發環境2
1.2.1百家爭鳴的繁榮景象2
1.2.2IDLE簡單使用6
1.3變量、運算符與表達式9
1.3.1Python變量與內置數據類型9
1.3.2常用內置函數15
1.3.3運算符與表達式21
1.3.4人機對話基本接口25
1.4模塊安裝與使用28
1.4.1安裝Python擴展庫28
1.4.2模塊導入與使用30
1.4.3編寫自己的模塊和包32
第2章Python序列35
2.1列表與列表推導式36
2.1.1列表創建與刪除36
2.1.2列表常用方法38
2.1.3列表推導式46
2.1.4切片50
2.2元組與生成器推導式54
2.2.1元組54
2.2.2生成器推導式55
2.3字典57
2.3.1字典創建和元素添加、修改與刪除57
2.3.2訪問字典對象的數據59
2.3.3案例精選61
2.4集合63[1][2]Python可以這樣學[1]目錄[2]2.4.1集合基礎知識63
2.4.2集合操作與運算64
2.4.3案例精選67
2.5序列解包69
第3章程序控制結構與函數設計71
3.1選擇結構71
3.1.1條件表達式71
3.1.2選擇結構的幾種形式73
3.1.3案例精選79
3.2循環結構82
3.2.1for循環與while循環的基本語法82
3.2.2break與continue語句83
3.2.3循環代碼優化技巧84
3.2.4案例精選86
3.3函數設計與使用90
3.3.1基本語法91
3.3.2函數參數不得不說的幾件事94
3.3.3變量作用域99
3.3.4lambda表達式102
3.3.5案例精選104
第4章面向對象程序設計122
4.1基礎知識122
4.1.1類的定義與使用122
4.1.2私有成員與公有成員123
4.1.3數據成員125
4.1.4方法126
4.1.5屬性129
4.1.6繼承131
4.1.7特殊方法與運算符重載134
4.2案例精選135
4.2.1自定義數組135
4.2.2自定義矩陣141
4.2.3自定義隊列147
4.2.4自定義棧151
4.2.5自定義二叉樹154
4.2.6自定義有向圖157
4.2.7自定義集合158
第5章字符串與正則表達式165
5.1字符串165
5.1.1字符串格式化的兩種形式168
5.1.2字符串常用方法171
5.1.3案例精選186
5.2正則表達式190
5.2.1正則表達式語法與子模式擴展語法190
5.2.2re模塊方法與正則表達式對象193
5.2.3案例精選199
第6章文件與文件夾操作206
6.1文件對象常用方法與屬性207
6.2文本文件操作案例精選209
6.3二進制文件操作案例精選217
6.3.1使用pickle模塊讀寫二進制文件217
6.3.2使用struct模塊讀寫二進制文件219
6.3.3使用shelve模塊操作二進制文件220
6.3.4使用marshal模塊操作二進制文件220
6.4文件與文件夾操作221
6.4.1標準庫os、os.path與shutil簡介221
6.4.2案例精選227
第7章異常處理結構、代碼測試與調試252
7.1異常處理結構252
7.1.1異常是什么252
7.1.2Python內置異常類層次結構254
7.1.3常見異常處理結構形式255
7.2代碼測試262
7.2.1doctest263
7.2.2單元測試264
7.3代碼調試270
7.3.1使用IDLE調試270
7.3.2使用pdb調試273
階段性寄語278
第8章數據庫應用開發279
8.1使用Python操作SQLite數據庫279
8.1.1Connection對象280
8.1.2Cursor對象281
8.1.3Row對象284
8.2使用Python操作其他關系型數據庫285
8.2.1操作Access數據庫285
8.2.2操作MS SQL Server數據庫286
8.2.3操作MySQL數據庫288
8.3操作MongoDB數據庫290
第9章網絡應用開發293
9.1計算機網絡基礎知識293
9.2Socket編程295
9.2.1UDP編程296
9.2.2TCP編程298
9.2.3網絡嗅探器300
9.2.4多進程端口掃描器302
9.2.5服務器端口映射功能的實現305
9.2.6自己編寫FTP通信軟件308
9.3域名解析與網頁爬蟲313
9.3.1網頁內容讀取與域名分析313
9.3.2網頁爬蟲315
9.3.3scrapy框架316
9.3.4BeautifulSoup4318
9.4網站開發323
9.4.1使用IIS運行Python CGI程序323
9.4.2Python在ASP.NET中的應用325
9.4.3Flask框架簡單應用327
9.4.4django框架簡單應用328
第10章多線程與多進程333
10.1多線程編程334
10.1.1線程創建與管理336
10.1.2線程同步技術339
10.2多進程編程346
10.2.1進程創建與管理347
10.2.2進程間數據交換347
10.2.3進程同步技術350
第11章大數據處理351
11.1大數據簡介351
11.2MapReduce框架352
11.3Spark應用開發356
第12章圖形編程與圖像處理361
12.1圖形編程361
12.1.1繪制三維圖形361
12.1.2繪制三次貝塞爾曲線364
12.1.3紋理映射365
12.1.4響應鍵盤事件368
12.1.5光照模型369
12.2圖像處理372
12.2.1pillow模塊基本用法372
12.2.2計算橢圓中心375
12.2.3動態生成比例分配圖376
12.2.4生成驗證碼圖片377
12.2.5gif動態圖像分離與生成379
12.2.6材質貼圖380
12.2.7圖像融合381
12.2.8棋盤紋理生成383
第13章數據分析與科學計算可視化384
13.1擴展庫numpy簡介384
13.2科學計算擴展庫scipy393
13.2.1數學、物理常用常數與單位模塊constants394
13.2.2特殊函數模塊special395
13.2.3信號處理模塊signal395
13.2.4圖像處理模塊ndimage397
13.3擴展庫pandas簡介401
13.4統計分析標準庫statistics用法簡介405
13.5matplotlib407
13.5.1繪制正弦曲線408
13.5.2繪制散點圖408
13.5.3繪制餅狀圖410
13.5.4繪制帶有中文標簽和圖例的圖410
13.5.5繪制圖例標簽中帶有公式的圖411
13.5.6使用pyplot繪制,多個圖形單獨顯示412
13.5.7繪制三維參數曲線413
13.5.8繪制三維圖形414
13.5.9使用指令繪制自定義圖形416
13.5.10在tkinter中使用matplotlib417
13.5.11使用matplotlib提供的組件實現交互式圖形顯示419
13.5.12根據實時數據動態更新圖形421
13.5.13使用Slider組件調整曲線參數422
第14章密碼學編程425
14.1經典密碼算法425
14.1.1愷撒密碼算法425
14.1.2維吉尼亞密碼427
14.1.3換位密碼算法428
14.2安全哈希算法429
14.3對稱密鑰密碼算法DES和AES432
14.4非對稱密鑰密碼算法RSA與數字簽名算法DSA433
14.4.1RSA433
14.4.2DSA435
第15章tkinter編程精彩案例436
15.1用戶登錄界面436
15.2選擇類組件應用438
15.3簡單文本編輯器441
15.4簡單畫圖程序445
15.5電子時鐘449
15.6簡單動畫451
15.7多窗口編程454
15.8屏幕任意區域截圖456
15.9音樂播放器458
15.10遠程桌面監控系統462
第16章課堂教學管理系統設計與實現466
16.1功能簡介466
16.1.1教師端功能466
16.1.2學生端功能467
16.2數據庫設計468
16.3系統總框架與通用功能設計469
16.4數據導入功能473
16.4.1學生名單導入473
16.4.2題庫導入473
16.5點名與加分功能475
16.5.1在線點名475
16.5.2離線點名與加分477
16.6隨機提問功能480
16.7在線收作業功能482
16.7.1學生端482
16.7.2教師端483
16.8在線自測與在線考試功能485
16.8.1學生端486
16.8.2教師端488
16.9信息查看功能490
16.10數據導出功能492
16.11其他輔助功能493
16.11.1防作弊功能493
16.11.2服務器自動發現功能493
16.11.3Word版試卷生成功能494
結束語496
附錄A本書中例題清單497
附錄B本書中插圖清單503
附錄C本書中表格清單507
附錄D本書中拓展知識摘要清單508
參考文獻513
第5章字符串與正則表達式5.1字符串最早的字符串編碼是美國標準信息交換碼ASCII,僅對10個數字、26個大寫英文字母、26個小寫英文字母及一些其他符號進行了編碼。ASCII采用1個字節來對字符進行編碼,最多只能表示256個符號。隨著信息技術的發展和信息交換的需要,各國的文字都需要進行編碼,不同的應用領域和場合對字符串編碼的要求也略有不同,于是分別設計了不同的編碼格式,常見的主要有UTF8、UTF16、UTF32、GB2312、GBK、CP936、base64、CP437等。UTF8編碼是國際通用的編碼,以1個字節表示英語字符(兼容ASCII),以3個字節表示中文,還有些語言的符號使用2個字節(如俄語和希臘語符號)或4個字節,UTF8對全世界所有國家需要用到的字符進行了編碼。GB2312是我國制定的中文編碼,使用1個字節表示英語,2個字節表示中文;GBK是GB2312的擴充,而CP936是微軟公司在GBK基礎上開發的編碼方式。GB2312、GBK和CP936都是使用2個字節表示中文,UTF8使用3個字節表示中文。不同編碼格式之間相差很大,采用不同的編碼格式意味著不同的表示和存儲形式,把同一字符存入文件時,寫入的內容可能會不同,在理解其內容時必須了解編碼規則并進行正確的解碼。如果解碼方法不正確就無法還原信息,從這個角度來講,字符串編碼也具有加密的效果。Python 3.x支持中文,使用Unicode編碼格式,無論是一個數字、英文字母,還是一個漢字,都按一個字符對待和處理。例如,在Python 3.5.1中執行下面的代碼,從代碼中可以看到,在Python 3.x中甚至可以使用中文作為變量名。>>> s='中國山東煙臺'>>> len(s)#字符串長度,或者包含的字符個數6>>> s='SDIBT'>>> len(s)5>>> s='中國山東煙臺SDIBT'#中文與英文字符同樣對待,都算一個字符>>> len(s)11>>> 姓名='張三'#使用中文作為變量名>>> 年齡=40>>> print(姓名)#輸出變量的值張三>>> print(年齡)40[1][2]Python可以這樣學[1]第5章字符串與正則表達式[2]小提示: 在Windows平臺上使用Python 2.x時,input()函數從鍵盤輸入的字符串默認為GBK編碼,而Python程序中的字符串編碼則使用#coding顯式地指定,常用的方式有: #coding=utf-8#coding:utf-8#--coding:utf-8 --在Python中,字符串屬于不可變序列類型,使用單引號(這是最常用的)、雙引號、三單引號或三雙引號作為界定符,并且不同的界定符之間可以互相嵌套。下面幾種都是合法的Python字符串: 'abc'、'123'、'中國'、"Python"、'''Tom said,"Let's go"'''除了支持序列通用方法(包括雙向索引、比較大小、計算長度、元素訪問、切片等操作)以外,字符串類型還支持一些特有的操作方法,如格式化、字符串查找、字符串替換(注意,不是原地替換)、排版等。但由于字符串屬于不可變序列,不能直接對字符串對象進行元素增加、修改與刪除等操作。另外,字符串對象提供的replace()和translate()方法也不是對原字符串直接進行修改替換,而是返回一個修改替換后的新字符串作為結果。Python支持短字符串駐留機制,對于短字符串,將其賦值給多個不同的對象時,內存中只有一個副本,多個對象共享該副本,與其他類型數具有相同的特點。然而,這一點并不適用于長字符串,長字符串不遵守駐留機制,下面的代碼演示了短字符串和長字符串在這方面的區別。>>> a='1234'>>> b='1234'>>> id(a)== id(b)#短字符串支持內存駐留機制True>>> a='1234'50>>> b='1234'50>>> id(a)== id(b)#長字符串不支持內存駐留機制False如果需要判斷一個變量是否為字符串,可以使用內置方法isinstance()或type()。>>> type('中國')>>> type('中國'.encode('gbk'))#編碼成字節串,采用GBK編碼格式>>> bytes#bytes是Python的內置類>>> isinstance('中國', str)True>>> type('中國')== strTrue>>> type('中國'.encode())== bytesTrue>>> type('中國')== bytesFalse拓展知識: 轉義字符。如果大家學習過其他語言,應該了解轉義字符的概念,可以跳過這部分內容。轉義字符是指,在字符串中某些特定的符號前加一個斜線之后該字符將被解釋為另外一種含義,不再表示本來的字符。常見的轉義字符如表51所示。表51常見的轉義字符轉義字符含義\\b退格,把光標移動到前一列位置\\f換頁符\\n換行符\\r回車\\t水平制表符\\v垂直制表符\\\\一個\\\\'單引號\\"雙引號\\ooo3位八進制數對應的字符\\xhh2位十六進制數對應的字符\\uhhhh4位十六進制數表示的Unicode字符下面的代碼演示了轉義字符的用法: >>> print('Hello\\nWorld')#包含轉義字符的字符串HelloWorld>>> oct(65)'0o101'>>> print('\\101')#3位八進制數對應的字符A>>> hex(65)'0x41'>>> print('\\x41')#2位十六進制數對應的字符A>>> ord('董')33891>>> hex(_)'0x8463'>>> print('\\u8463')#4位十六進制數表示的Unicode字符董5.1.1字符串格式化的兩種形式如果需要將其他類型的數據轉換為字符串,或者嵌入其他字符串或模板中再進行輸出,就需要用到字符串格式化。Python中字符串格式化的格式如圖51所示,格式運算符%之前的部分為格式字符串,之后的部分為需要進行格式化的內容。圖51字符串格式化Python支持大量的格式字符,表52列出了比較常用的一部分。表52格式字符格式字符說明%s字符串(采用str()的顯示)%r字符串(采用repr()的顯示)%c單個字符%b二進制整數%d十進制整數%i十進制整數%o八進制整數%x十六進制整數%e指數(基底寫為e)續表格式字符說明%E指數(基底寫為E)%f、%F浮點數%g指數(e)或浮點數(根據顯示長度)%G指數(E)或浮點數(根據顯示長度)%%字符"%"下面的代碼演示了字符串格式化的用法: >>> x=1235>>> so="%o" % x>>> so'2323'>>> sh="%x" % x>>> sh'4d3'>>> se="%e" % x>>> se'1.235000e 03'>>> "%s"%65#等價于str()'65'>>> "%s"%65333'65333'>>> '%d,%c'%(65, 65)#使用元組對字符串進行格式化,按位置進行對應'65,A'>>> "%d"%"555"#試圖將字符串轉換為整數進行輸出,拋出異常Traceback(most recent call last):File "", line 1, in "%d"%"555"TypeError: %d format: a number is required, not str>>> int('555')#可以使用int()函數將合法的數字字符串轉換為整數555>>> '%s'%\[1, 2, 3\]'\[1, 2, 3\]'>>> str((1, 2, 3))#可以使用str()函數將任意類型數據轉換為字符串'(1, 2, 3)'>>> str(\[1, 2, 3\])'\[1, 2, 3\]'除了上面介紹的字符串格式化方法,目前Python社區更推薦使用format()方法進行格式化,該方法更加靈活,不僅可以使用位置進行格式化,還支持使用與位置無關的參數名字來進行格式化,并且支持序列解包格式化字符串,為程序員提供了非常大的方便。例如: >>> print('{0:.3f}'.format(1/3))#保留3位小數0.333>>> 1/30.3333333333333333>>> print("The number {0:,} in hex is: {0:#x}, in oct is {0:#o}".format(55))The number 55 in hex is: 0x37, in oct is 0o67>>> print("The number {0:,} in hex is: {0:x}, the number {1} in oct is {1:o}".format(5555, 55))The number 5,555 in hex is: 15b3, the number 55 in oct is 67>>> print("The number {1} in hex is: {1:#x}, the number {0} in oct is {0:#o}".format(5555, 55))The number 55 in hex is: 0x37, the number 5555 in oct is 0o12663>>> print("my name is {name}, my age is {age}, and my QQ is {qq}".format(name="Dong", qq="306467355", age=38))my name is Dong, my age is 38, and my QQ is 306467355>>> position =(5, 8, 13)>>> print("X:{0\[0\]};Y:{0\[1\]};Z:{0\[2\]}".format(position))#使用元組同時格式化多個值X:5;Y:8;Z:13>>> weather=\[("Monday", "rain"),("Tuesday", "sunny"),("Wednesday", "sunny"),("Thursday", "rain"),("Friday", "Cloudy")\]>>> formatter="Weather of '{0\[0\]}' is '{0\[1\]}'".format>>> for item in map(formatter, weather):print(item)上面一段代碼也可以改為下面的寫法: >>> for item in weather:print(formatter(item))運行結果為Weather of 'Monday' is 'rain'Weather of 'Tuesday' is 'sunny'Weather of 'Wednesday' is 'sunny'Weather of 'Thursday' is 'rain'Weather of 'Friday' is 'Cloudy'拓展知識: 在字符串格式化方法format()中常用的格式字符。在字符串格式化方法format()中可以使用的格式主要有b(二進制格式)、c(把整數轉換成Unicode字符)、d(十進制格式)、o(八進制格式)、x(小寫十六進制格式)、X(大寫十六進制格式)、e/E(科學計數法格式)、f/F(固定長度的浮點數格式)、%(使用固定長度浮點數顯示百分數)。拓展知識: Python標準庫string還提供了用于字符串格式化的模板類Template。例如: >>> from string import Template>>> t=Template('My name is ${name}, and is ${age} years old.')#創建模板>>> d={'name':'Dong', 'age':39}>>> t.substitute(d)#替換'My name is Dong, and is 39 years old.'>>> tt=Template('My name is $name, and is $age years old.')>>> tt.substitute(d)'My name is Dong, and is 39 years old.'5.1.2字符串常用方法[3/4]1. find()、rfind()、index()、rindex()、count()find()和rfind()方法分別用來查找一個字符串在另一個字符串指定范圍(默認是整個字符串)中首次和一次出現的位置,如果不存在則返回-1;index()和rindex()方法用來返回一個字符串在另一個字符串指定范圍中首次和一次出現的位置,如果不存在則拋出異常;count()方法用來返回一個字符串在另一個字符串中出現的次數,如果不存在則返回0。>>> s="apple,peach,banana,peach,pear">>> s.find("peach")#返回及時次出現的位置6>>> s.find("peach", 7)#從指定位置開始查找19>>> s.find("peach", 7, 20)#在指定范圍中進行查找-1>>> s.rfind('p')#從字符串尾部向前查找25>>> s.index('p')#返回首次出現的位置1>>> s.index('pe')6>>> s.index('pear')25>>> s.index('ppp')#指定子字符串不存在時拋出異常Traceback(most recent call last):File "", line 1, in s.index('ppp')ValueError: substring not found>>> s.count('p')#統計子字符串出現的次數5>>> s.count('pp')1>>> s.count('ppp')#不存在時返回00拓展知識: 實際開發時應優先考慮使用Python內置函數和內置對象的方法,運行速度快,并且運行穩定。例如,下面的代碼用來檢查長字符串中哪些位置上的字母是a,通過運行結果可以發現,使用字符串方法find()的速度明顯要比逐個字符比較快很多。from string import ascii_lettersfrom random import choicefrom time import time
letters=''.join(\[choice(ascii_letters)for i in range(999999)\])def positions_of_character(sentence, ch):#使用字符串對象的find()方法result=\[\]index=0index=sentence.find(ch, index 1)while index != -1:result.append(index)index=sentence.find(ch, index 1)return result
def demo(s, c):#普通方法,逐個字符比較result=\[\]for i,ch in enumerate(s):if ch == c:result.append(i)return result
start=time()positions=positions_of_character(letters, 'a')print(time()-start)
start=time()p=demo(letters, 'a')print(time()-start)運行結果如下: 0.0090005397796630860.08400487899780273速度居然相差10倍左右,看來內置對象提供的方法還真是不錯,簡直是人見人愛,花見花開。但是不要高興太早,一切都是相對的,這世間沒有得好,也沒有得壞,內置對象的某些方法也不是在任何場合都能保障。例如把上面代碼中的letters=''.join(\[choice(ascii_letters)for i in range(999999)\])改為letters=''.join(\[choice('ab')for i in range(999999)\])然后再次運行,會發現結果與上面的代碼恰好相反,逐個比較的方法又比使用find()方法快了很多。稍加分析可以發現,上面兩段代碼是一樣的,只是所查找數據的密度不一樣,處理速度卻有著翻天覆地的變化。所以說,首先要分析待處理的數據有什么樣的特點(包括組成元素、分布情況等),然后才能設計的算法并采用較高效的方法。但一般情況下,Python內置函數、內置對象的方法和標準庫對象的效率要高于自己編寫的代碼。2. split()、rsplit()、partition()、rpartition()split()和rsplit()方法分別用來以指定字符為分隔符,從字符串左端和右端開始將其分隔成多個字符串,并返回包含分隔結果的列表;partition()和rpartition()用來以指定字符串為分隔符將原字符串分隔為3部分,即分隔符之前的字符串、分隔符字符串和分隔符之后的字符串,如果指定的分隔符不在原字符串中,則返回原字符串和兩個空字符串。>>> s="apple,peach,banana,pear">>> li=s.split(",")#使用逗號進行分隔>>> li\["apple", "peach", "banana", "pear"\]>>> s.partition(',')#從左側使用逗號進行切分('apple', ',', 'peach,banana,pear')>>> s.rpartition(',')#從右側使用逗號進行切分('apple,peach,banana', ',', 'pear')>>> s.rpartition('banana')#使用字符串作為分隔符('apple,peach,', 'banana', ',pear')>>>s="2014-10-31">>> t=s.split("-")#使用指定字符作為分隔符>>> t\['2014', '10', '31'\]>>> list(map(int, t))#將分隔結果轉換為整數\[2014, 10, 31\]對于split()和rsplit()方法,如果不指定分隔符,則字符串中的任何空白符號(包括空格、換行符、制表符等)的連續出現都將被認為是分隔符,返回包含最終分隔結果的列表。>>> s='hello world \\n\\n My name is Dong '>>> s.split()\['hello', 'world', 'My', 'name', 'is', 'Dong'\]>>> s='\\n\\nhello world \\n\\n\\n My name is Dong '>>> s.split()\['hello', 'world', 'My', 'name', 'is', 'Dong'\]>>> s='\\n\\nhello\\t\\t world \\n\\n\\n My name\\t is Dong '>>> s.split()\['hello', 'world', 'My', 'name', 'is', 'Dong'\]另外,split()和rsplit()方法還允許指定較大分隔次數(注意,不是必須分隔這么多次),例如: >>> s='\\n\\nhello\\t\\t world \\n\\n\\n My name is Dong '>>> s.split(maxsplit=1)#分隔1次\['hello', 'world \\n\\n\\n My name is Dong '\]>>> s.rsplit(maxsplit=1)\['\\n\\nhello\\t\\t world \\n\\n\\n My name is', 'Dong'\]>>> s.split(maxsplit=2)\['hello', 'world', 'My name is Dong '\]>>> s.rsplit(maxsplit=2)\['\\n\\nhello\\t\\t world \\n\\n\\n My name', 'is', 'Dong'\]>>> s.split(maxsplit=5)\['hello', 'world', 'My', 'name', 'is', 'Dong '\]>>> s.split(maxsplit=6)\['hello', 'world', 'My', 'name', 'is', 'Dong'\]>>> s.split(maxsplit=10)#較大分隔次數大于實際可分隔次數時,自動忽略\['hello', 'world', 'My', 'name', 'is', 'Dong'\]小提示: 調用split()方法并且不傳遞任何參數時,將使用任何空白字符作為分隔符,如果字符串存在連續的空白字符,split()方法將自動忽略;明確傳遞參數指定split()使用的分隔符時,情況略有不同。>>> 'a,,,bb,,ccc'.split(',')#每個逗號都被作為獨立的分隔符\['a', '', '', 'bb', '', 'ccc'\]>>> 'a\\t\\t\\tbb\\t\\tccc'.split('\\t')#每個制表符都被作為獨立的分隔符\['a', '', '', 'bb', '', 'ccc'\]>>> 'a\\t\\t\\tbb\\t\\tccc'.split()#連續多個制表符被作為一個分隔符\['a', 'bb', 'ccc'\]3. join()與split()相反,join()方法用來將列表中多個字符串進行連接,并在相鄰兩個字符串之間插入指定字符。>>> li=\["apple", "peach", "banana", "pear"\]>>> sep=",">>> s=sep.join(li)#使用逗號作為連接符>>> s
語言輕松愉快,又有深度
這是一本好書,講解內容深入淺出又清晰明了,推薦給所有喜歡閱讀的朋友同好們。
不錯啊很不錯!!!!
書的整體內容是很不錯的,紙質的質量也很贊
最近各電商平臺圖書大促銷,囤了不少,暫時還沒看,容后再補充。
看了一下沒什么缺頁的地方,紙張挺好的。
此書不錯,對我有幫助
紙張很好!
紙質很好,要是能在快遞的時候包裝好點就更好了
很好的一本書!
推薦一下,值得一讀
東西沒收到就降價了,機器人讓打當當客服補差價,可一直沒人接,不開心…
很棒的書,值得推薦!
內容很詳盡,就是印刷感覺很倉促,字跡很多頁很淺,這點不滿意