第二章 變量和簡單數據類型
對于給定變量賦值,在程序中可以隨時改變該變量值,而python將始終記錄變量的最新值。
數據的類型:
字符串:用’’或者””括起來的都是字符串,字符串的常用函數:
??????? 方法Title(),通常用法:**.title()——首字母大寫lower()——全部小寫;upper()——全部大寫
???????+,通常是用于合并字符串。
???????\t:制表符,用于在字符串前添加空格
???????\n:換行符,用于換行
???????\n\t:,用于換到下一行,并在下一行開頭添加一個制表符
???????方法Rstrip():刪除字符串末尾的空白,該刪除是暫時的
???????Lstrip():刪除字符串開頭的空白
???????Strip():刪除字符串兩端的空白
數據:
整數,可對整數執(zhí)行加(+)減(-)乘(*)除(/)運算。
浮點數,
對于數字有時需要用str()方法來避免類型錯誤
第三章 列表
names=[,,,,]
列表形式:[,,,,],列表中可以放任何元素。列表是從0開始索引,列表末的索引一般為-1,列表的命名最好是帶s。
對列表進行修改:
修改列表元素:可以直接對指定元素進行修改,例如:names[2]=’****’
列表中添加元素:1.可以利用append()方法在列表最后添加元素,例如names.append(‘****’)
????????????????????????????? 2.利用insert()方法在列表的指定位置添加元素,例如names.insert(2,’****’)
列表中刪除元素:1.del語句刪除!指定位置的元素,例如del names[2](首次出現語句用法)
?????????????????????????????? 2.使用方法pop()刪除列表指定位置的元素(默認值為列表最末元素),并將該元素返回給pop(),所以?????? pop()是一個有值返回的方法。例如:pop_name=names.pop(2)
?????????????? ? ? ? ? ? ? ? 3.刪除特定已知的元素,直接使用方法remove()。例如:names.remove(‘**’),值得注意的是,當特定元素出 現多次,remove()僅刪除第一個出現的值,因此全部刪除需要使用for循環(huán)
組織列表:1.對列表按字母順序排列,并且該排列改變是永久的,可使用sort()方法。例如:names.sort(),names.sort(reverse=True),表示按字母的反順序排列
???????? ? ? ? ? ?? 2.對列表進行暫時性更改,使用的是sorted()函數!sorted(names)
請注意方法與函數的調用方式不同!書中對該部分并沒有詳細解釋!方法的調用是name.sort(),而函數的調用方法是sorted(names)。并且函數與方法的作用域并不相同:以sort()和sorted()為例,sort()對列表的改變是永久性的,sorted()的改變是暫時性的。但是對于該問題在后續(xù)的自定義函數上還存在問題!
?????????????????? 3.倒著打印函數,使用方法reverse,例如:names.reverse(),print(names)
?????????????????? 4.確定列表的長度:使用函數len()確定列表長度,其將返回列表長度。
?
第四章 操作列表
names=[,,,,]
遍歷列表:for循環(huán)例如:for name in names:
利用函數創(chuàng)建數值列表:1.range()函數回生成一系列數字,例如range(1,10)表示會返回從1到9一系列數字,即返回(1,2,3,4,5,6,7,8,9),注意range返回的數值是到第二個數值即10前的一位數;
?????????????????? ? ? ? ?? 2.list()函數可以直接將range()函數的結果直接轉換為列表,即list(range(1,10))返回的將是[1,2,3,4,5,6,7,8,9]
列表切片:對于列表,想僅僅使用列表的一部分可以使用切片,格式如下:names[1:4]表示僅取names列表中的索引1-3的數字?。ǜ裢庾⒁猓硎驹诘诙€值終止,只能取到第二個值-1的索引)其中names[:4]默認從第0個索引開始??;而names[1:]表示取到末尾所有元素
???????? ? ? ? ? ?? 利用切片可以復制列表:令name_copy=names[:],對names列表建立了獨立副本,因此與直接=賦值不同,不具有一致性
元組:不可變的列表函數:dimensions=(200,50)表示不可變列表函數,因此不能通過demensions(0)=500來改變第一個元素,但可以通過直接修改來改變這個函數,例如:demensions=(100)
第五章 if語句
if語句的判斷:if語句后續(xù)條件如果滿足,則會返回true,從而執(zhí)行條件后的語句,如果不滿足則會返回false,執(zhí)行else后的語句。這種要么返回True要么返回False的語句被稱為布爾表達式。
判斷類別:
第九章
學會如何創(chuàng)建類,使用class創(chuàng)建類,使用方法__init__定義類的形參,其中__init__中必定包括self這一形參,因為self會接受實例的所有實參,在將其傳遞到具體實參。
創(chuàng)建類中,可以設定默認值,通過在__init__()方法中設定默認值,有兩種方法,第一通過self.屬性=默認值設定,也可以直接在__init__()中設定直接將屬性=默認值;之后可以直接通過具體實例.屬性=其他值修改默認值,也可以在類中設定方法,修改默認值:
def 方法(self,值):
???self.屬性=值
創(chuàng)建類后,可創(chuàng)建相應實例,通過句點.可以訪問實例的屬性、調用相關方法。
類是可以直接繼承,繼承時要注意原類要包含在其中,具體繼承方法:
Class 子類(父類):
?? def__init__(self,子類屬性):
??????supre ().__init__(子類屬性)
其中最值得注意的是super()方法,其使子類可以調用父類的方法
子類可以單獨增加屬性及方法,也可以重寫父類方法,只需定義相同的方法名稱,能夠覆蓋父類方法;
同時注意到可以將實例用作屬性,也就是定義某個屬性為一個類的實例:
self.battery=Battery()
調用該參數時是調用該實例,因此需要指明具體的方法:my_car.battery.describe_battery().
類可以構成模塊,在具體實例中可以通過:from car import Car,? 該語句可以從car模塊中倒入Car類,該方法不僅可以在實例中導入類,也可以在模塊中導入模塊。
該方法為面向對象編程。
第十章
本章學習從指定路徑中讀取文件、寫入文件。對應語句為:withopen(filename,’w’) as? file:
其中’w’、’a’、’r’分別對應寫入模式、附加模式、讀取模式,如果沒有這個參數則默認讀取模式。As 后的file作為對象,在with模塊下使用該名稱表明直接對該文件進行了編輯。
其中如若編輯的對象位置與.py位置一致,則filename=’*.txt’;如果是在.py的位置的文件夾中,則filename=’wenjianjia\*.txt’
在只讀模式下,常用的函數有:read()——是指讀取文件的全部內容,由于read()會返回到達文件末尾返回一個空字符串,所以經常結合rstrip()使用
Readline():從文件中讀取每一行,并將其儲存在一個列表中,這表明readline()返回的是一個以文件每一行為元素的列表
在寫入模式下,常用的函數有:write():將字符串寫入文件,python只能將字符串寫入文本文件,注意在write中加入換行符\n
本章學習如何在出現異常時繼續(xù)運行,而不是報錯,即處理異常。通過try—except—else來進行異常處理。
Try:后面接著有可能出現異常的python語句
Except ZeroDivisionError:except后跟著例外的事項,之后在該模塊下跟著例外情況或者說出現制定異常下應該進行的處理,pass或者別的
Else:不一定會使用,表明在try代碼塊成功執(zhí)行下的代碼。
本章學習引用模塊,之后進行儲存或者下載數據。
引用json模塊:import json,之后就可以進行下載或者儲存數據庫
儲存數據庫:json.dump(要儲存的數據,可用于儲存數據的文件對象),這一般會配合著with…open使用,要儲存的數據可以是字符串、列表
下載數據:json.load(下載的文件名稱),其返回數據。
本章學習了一些處理方法:
Try—except—else與while相結合;
分析文本,通過方法split()以空格為分隔符將字符串分拆程多個部分,并將這些部分都儲存到一個列表中。
保存和讀取用戶生成的數據。
第13章
單元測試:針對某個函數,用于核實函數某個方面沒有問題
測試用例是一組單元測試,這些測試和在一起核實函數在各種情形下的行為都符合要求。
步驟:引入模塊unittest:import unittest
?????引入要檢測的函數:from **.py import **(函數名稱)
?????引用單元檢測的類:class **TestCase(unittest.TestCase): 其中子類的命名可以隨意,但最好包含test
??????測試函數的一個方面:def test_**(self):
(要注意一定要以Test開頭,這樣運行該PY文件時會自動運行test開頭的部分))
??????????????????????????? 之后可以給要監(jiān)測的部分以實參
????????????????????????? ??Self.assertEqual(函數給于實參后的運行結果,‘本應運行結果’)該方法為斷言方法,用于核實函數結果與期待結果是否一致
??????運行文件中的測試:unittest.main()
具體實例:
import unittest
from name_function importget_formatted_name
class NamesTestCase(unittest.TestCase):
"""測試name_function.py"""
def test_first_last_name(self):
"""能夠正確地處理像Janis
Joplin這樣的姓名嗎?"""
??formatted_name= get_formatted_name('janis', 'joplin')
??self.assertEqual(formatted_name, 'JanisJoplin')
unittest.main()
對類進行測試
與對函數進行測試大體是相同的,首先要增加對多個斷言方法:
assertEqual(a,b),判斷A=B
assertNotEqual(a,b),判斷A!=B
assertTure(X),判斷X是否為ture
assertFalse(X),判斷X是否為false
assertIn(item,list),核實item在list中
assertNotIn(item,list),核實item不在list中
其次增加了setUp()方法,setUp()會率先被運行,然后在運行以test打頭的方法,setUp完成兩件事:第一,給類以具體參數,二,給類參數以變量。由于該方法中的變量需在后續(xù)中使用,因此必須在變量前加self.以確保能夠將變量儲存在屬性中。
import unittest
from survey import AnonymousSurvey
classTestAnonymousSurvey(unittest.TestCase):
"""針對AnonymousSurvey類的測試"""
def setUp(self):
"""
創(chuàng)建一個調查對象和一組答案,供使用的測試方法使用
"""
question = "What language did you first learn to speak?"
???? ?self.my_survey = AnonymousSurvey(question)(給于要測試的類具體參數)
?????self.responses = ['English', 'Spanish','Mandarin'](給于參數變量)
??? deftest_store_single_response(self):
"""測試單個答案會被妥善地存儲"""
self.my_survey.store_response(self.responses[0])
self.assertIn(self.responses[0], self.my_survey.responses)
def test_store_three_responses(self):
"""測試三個答案會被妥善地存儲"""
for response in self.responses:
self.my_survey.store_response(response)
for response in self.responses:
self.assertIn(response, self.my_survey.responses)