第一章筆記
"BIF"內(nèi)置函數(shù)
"組(suit)"Python代碼塊蜓斧,會(huì)通過縮進(jìn)來指示分組
"功能齊全(Batteries included)"這是指Python提供了快速高效地完成工作所需的大多數(shù)功能
- 從命令行或者IDLE中運(yùn)行Python3
- 標(biāo)識(shí)符是指數(shù)據(jù)對象的名字。標(biāo)識(shí)符沒有“類型”睁冬,不過標(biāo)識(shí)符所指示的數(shù)據(jù)對象有類型
- print() BIF會(huì)在屏幕上顯示一個(gè)消息
- 列表是一個(gè)數(shù)據(jù)集合挎春,數(shù)據(jù)項(xiàng)之間用逗號(hào)分隔看疙,整個(gè)列表用中括號(hào)包圍
- 列表就像打了“激素”的數(shù)組
- 可以用BIF處理列表,另外列表還支持一組列表方法
- 列表可以存放任意數(shù)據(jù)直奋,而且數(shù)據(jù)可以是混合類型能庆,列表還可以包含其他列表
- 列表可以隨意伸縮,數(shù)據(jù)使用的所有內(nèi)存都由Python為你管理
- Python使用縮進(jìn)將語句歸組在一起
- len() BIF會(huì)提供某個(gè)數(shù)據(jù)對象的長度脚线,或者統(tǒng)計(jì)一個(gè)集合中的項(xiàng)數(shù)搁胆,如列表中的項(xiàng)數(shù)
- for循環(huán)允許迭代處理一個(gè)列表,這通常比使用一個(gè)等價(jià)的while循環(huán)更方便
- 可以利用if...else...語句在代碼中完成判定
- isinstance() BIF會(huì)檢查一個(gè)標(biāo)識(shí)符是否指示某個(gè)指定類型的數(shù)據(jù)對象
- 使用def來定義一個(gè)定制函數(shù)
第二章筆記
發(fā)布到PyPi
- 首先新建一個(gè)文件夾保存模塊
- 在新文件夾中創(chuàng)建一個(gè)名為“setup.py”的文件邮绿,setup文件包含發(fā)布的元數(shù)據(jù)
from distutils.core import setup
setup(
name='nester_lian',
version='1.0.0',
py_modules=['nester_lian'],
author='******',
author_email='********@163.com',
url='http://*******.com',
description='A simple printer of nested lists',
)
- 構(gòu)建一個(gè)發(fā)布文件渠旁,在windows系統(tǒng)下,打開管理員命令行進(jìn)入新建的文件夾目錄下船逮,鍵入命令:D:\Python35\python.exe setup.py sdist
- 將發(fā)布安裝到Python 本地副本中顾腊,同樣在上一步中的命令行窗口中鍵入:D:\Python35\python.exe setup.py install
- 使用模塊的時(shí)候記得命名空間的關(guān)系,看如何導(dǎo)入的挖胃,決定如何使用模塊中的方法或變量
- 上傳到Pypi網(wǎng)站杂靶,與大家共享代碼,首先注冊一個(gè)賬號(hào)冠骄,然后在本地命令行窗口中再次確認(rèn)注冊的賬號(hào)伪煤,每臺(tái)電腦安裝python后主需要注冊本地注冊賬號(hào)一次,使用命令:D:\Python35\python.exe setup.py register
- 注冊后即可上傳凛辣,同樣在命令行鍵入:D:\Python35\python.exe setup.py upload
- Python會(huì)在一組特定位置尋找模塊抱既,查看搜索位置的方式,在控制臺(tái)鍵入:
import sys;
sys.path
使用三重引號(hào)字符串可以在代碼中加入一個(gè)多行注釋
Python內(nèi)存中的名字就存放在“命名空間中”
Python的主命名空間名為__main__
- 模塊是一個(gè)包含Python代碼的文本文件
- 發(fā)布工具允許將模塊轉(zhuǎn)化為可共享的包
- setup.py程序提供了模塊的元數(shù)據(jù)扁誓,用來構(gòu)建防泵、安裝和上傳打包的發(fā)布
- 使用import語句可以將模塊導(dǎo)入到其他程序中
- Python的各個(gè)模塊提供了自己的各個(gè)命名空間,使用module.function()形式調(diào)用模塊的函數(shù)時(shí)蝗敢,要用命名空間名限定函數(shù)
- 使用import語句的from module import function形式可以從一個(gè)模塊將函數(shù)專門導(dǎo)入到當(dāng)前的命名空間
- 使用#可以注釋掉一行代碼捷泞,或者為程序增加一個(gè)簡短的單行注釋
- 內(nèi)置函數(shù)(built-in functions,BIF)有自己的命名空間,名為__builtins__,這會(huì)自動(dòng)包含在每一個(gè)Python程序中
- range()BIF可以與for結(jié)合使用寿谴,從而迭代固定次數(shù)
- 包含end=''作為print() BIF的一個(gè)參數(shù)會(huì)關(guān)閉其默認(rèn)行為(即在輸入中自動(dòng)包含換行)
- 如果函數(shù)參數(shù)提供一個(gè)缺省值锁右,這個(gè)函數(shù)參數(shù)就是可選的
第三章筆記
文件處理方法,文件打開讶泰,文件關(guān)閉
#打開文件咏瑟,賦值給一個(gè)文件對象,代表著打開的文件
try:
the_file=open('file.txt')
#文件處理代碼
#文件處理代碼
except ***Error:
print("*****")
finally:
the_file.close()
“異郴臼穑”(exception)因運(yùn)行時(shí)錯(cuò)誤而出現(xiàn)码泞,會(huì)產(chǎn)生一個(gè)traceback
"traceback"是出現(xiàn)的運(yùn)行時(shí)錯(cuò)誤的一個(gè)詳細(xì)描述
- 使用open() BIF打開一個(gè)磁盤文件,創(chuàng)建一個(gè)迭代器從文件讀取數(shù)據(jù)狼犯,一次讀取一個(gè)數(shù)據(jù)行
- readline()方法從一個(gè)打開的文件讀取一行數(shù)據(jù)
- seek()方法可以用來將文件“退回”到起始位置
- close()方法關(guān)閉一個(gè)之前打開的文件
- split()方法可以將之前的一個(gè)字符串分解為一個(gè)子串列表
- Python中不可改變的常量列表稱為元組(tuple)余寥。一旦將列表數(shù)據(jù)賦至一個(gè)元祖列表领铐,就不能再改變。元祖是不可改變的
- 數(shù)據(jù)不符合期望的格式時(shí)會(huì)出現(xiàn)ValueError
- 數(shù)據(jù)無法正常訪問時(shí)會(huì)出現(xiàn)IOError(例如宋舷,可能你的文件被移走或者重命名)
- help()BIF允許你在IDLE shell中訪問Python的文檔
- find()方法會(huì)在一個(gè)字符串中查找一個(gè)特定子串
- not關(guān)鍵字將一個(gè)調(diào)節(jié)取反
- try/except語句提供了一個(gè)異常處理機(jī)制绪撵,從而保護(hù)可能導(dǎo)致運(yùn)行時(shí)錯(cuò)誤的某些代碼行
- pass語句就是Python的空語句或null語句,它什么也不做
第四章筆記
文件的讀寫祝蝠,open()方法可以有多個(gè)模式莲兢,默認(rèn)是r模式即讀模式,如果要寫文件续膳,可以用參數(shù)提供"w",如果這個(gè)文件存在收班,則會(huì)清空它現(xiàn)有的內(nèi)容坟岔,也就是完全清除然后再寫入,如果需要追加到一個(gè)文件需要使用訪問模式a摔桦。如果要打開一個(gè)進(jìn)行讀寫社付,不清除則使用w+模式。
try:
data=open('its.txt',"w")
data2=open('data2.txt',"w")
print("It's ...",file=data)
except IOError as err:
print('File error: '+str(err))
finally:
if 'data' in locals():
data.close()
等同于使用with代碼
try:
with open('its.txt',"w") as data,open("data2.txt","w") as data2:
print("It's ...",file=data)
except IOError as err:
print('File error: '+str(err))
Python術(shù)語
“不可變類型”——Python中的一些數(shù)據(jù)類型一旦賦值邻耕,這個(gè)值就不能再改變
“腌制”——將數(shù)據(jù)對象保存到一個(gè)持久存儲(chǔ)中的過程
“解除腌制”——從持久存儲(chǔ)中恢復(fù)一個(gè)已保存的數(shù)據(jù)對象的過程
- strip()方法可以從字符串中去除不想要的空白符
- print() BIF的file參數(shù)控制將數(shù)據(jù)發(fā)送/保存到哪里
- finally組總會(huì)執(zhí)行鸥咖,而不管try/except語句中出現(xiàn)什么異常
- 會(huì)向ecxept組傳入一個(gè)異常對象,并使用as關(guān)鍵字賦至一個(gè)標(biāo)識(shí)符
- str()BIF可以用來訪問任何數(shù)據(jù)對象(支持串轉(zhuǎn)換)的串表示
- in操作符用于檢查成員關(guān)系
- "+"操作符用于字符串時(shí)將連接兩個(gè)字符串兄世,用于數(shù)字時(shí)則會(huì)將兩個(gè)數(shù)相加
- with語句會(huì)自動(dòng)處理所有已打開文件的關(guān)閉工作啼辣,即使出現(xiàn)異常也不例外。with語句也使用as關(guān)鍵字
- sys.stdout是Python中所謂的“標(biāo)準(zhǔn)輸出”御滩,可以從標(biāo)準(zhǔn)庫的sys模塊訪問
- 標(biāo)準(zhǔn)庫的pickle模塊允許你容易而高效地從將Python數(shù)據(jù)對象保存到磁盤以及從磁盤恢復(fù)
- pickle.dump()函數(shù)將數(shù)據(jù)保存到磁盤
- pickle.load()函數(shù)從磁盤恢復(fù)數(shù)據(jù)
第五章筆記
列表排序
- 原地排序鸥拧,排序后替換掉原本的列表:list.sort()
- 復(fù)制排序,復(fù)制一個(gè)副本后排序削解,保留了原來的列表:list.sorted()
一般一個(gè)列表轉(zhuǎn)化為另外一個(gè)列表需要干哪幾個(gè)步驟富弦?
- 創(chuàng)建一個(gè)新列表來存放轉(zhuǎn)換后的列表
- 迭代處理原列表中的數(shù)據(jù)
- 每次迭代時(shí)完成轉(zhuǎn)換
- 將轉(zhuǎn)換后的數(shù)據(jù)追加到新列表
clean_mikey=[]
for each_t in mikey:
clean_mikey.append(sanitize(each_t))
如果用列表推導(dǎo)的話只需要一行代碼,不需要自己添加append()代碼:
clean_mikey=[sanitize(each_t) for each_t in mikey]
Python中還有一個(gè)數(shù)據(jù)結(jié)構(gòu)(列表list氛驮,元組tuple不能改變長度與值腕柜,集合set)set集合數(shù)據(jù)結(jié)構(gòu),集合數(shù)據(jù)不允許重復(fù)矫废,沒有排序要求盏缤。
set()BIF創(chuàng)建一個(gè)空集合,三種創(chuàng)建集合的方式:
- distances=set() 創(chuàng)建一個(gè)空結(jié)合
- distances={10.6,5.4,4.5}
- distances=set(list) 列表中所有重復(fù)項(xiàng)都被忽略掉
“原地”排序——轉(zhuǎn)換然后替換
“復(fù)制排序”——轉(zhuǎn)換然后返回
“方法串鏈”——從左向右讀磷脯,對數(shù)據(jù)應(yīng)用一組方法
“函數(shù)串鏈”——從右向左讀蛾找,對數(shù)據(jù)應(yīng)用一組函數(shù)
“列表推導(dǎo)”——在一行上指定轉(zhuǎn)換(而不是使用迭代)
“分片”——從一個(gè)列表訪問多個(gè)列表項(xiàng)
“集合”——一組無序的數(shù)據(jù)項(xiàng),其中不包含重復(fù)項(xiàng)
- sort()方法可以在原地改變列表的排序
- sorted()BIF通過提供復(fù)制排序可以幾乎對任何數(shù)據(jù)結(jié)構(gòu)排序
- 向sort()或sorted()傳入reverse=True可以按降序排列數(shù)據(jù)
- 如果有以下代碼
new_l=[]
for t in old_l:
new_l.append(len(t))
使用列表推導(dǎo)重寫這個(gè)代碼赵誓,可以寫作:
new_l=[len(t) for t in old_l]
- 要訪問一個(gè)列表中的多個(gè)數(shù)據(jù)項(xiàng)可以用分片打毛。例如:my_list[3:6]這會(huì)訪問列表中索引位置3到(不包括)索引位置6的列表項(xiàng)
- 使用set()集合工廠方法可以創(chuàng)建一個(gè)集合
第六章筆記
pop()方法柿赊,會(huì)將列表指定位置的數(shù)據(jù)項(xiàng)刪除,并返回對應(yīng)的數(shù)據(jù)項(xiàng)
Python中的字典幻枉,是一個(gè)含有映射關(guān)系的數(shù)據(jù)結(jié)構(gòu)碰声,能夠保存數(shù)據(jù)項(xiàng)的結(jié)構(gòu)關(guān)系,創(chuàng)建方式可以有:
dict_data={} #直接用大括號(hào)包圍實(shí)現(xiàn)直接創(chuàng)建
dict_data=dict() #利用dict()方法創(chuàng)建
Python使用class創(chuàng)建對象熬甫,每個(gè)定義的類都有一個(gè)特殊的方法胰挑,名為__init__(),可以通過這個(gè)方法控制如何初始化對象椿肩,類中的方法與函數(shù)的定義類似瞻颂,也就是說同樣使用def來定義,基本形式如下:
class Athlete:
def __init__(self):
#The code to initialize a "Athlete" object.
...
創(chuàng)建對象實(shí)例郑象,不用new關(guān)鍵字贡这,只需要將對類名的調(diào)用賦至各個(gè)變量
a=Athltet()
b=Athltet()
c=Athltet()
Python類中self參數(shù)很重要,因?yàn)閜ython類的設(shè)計(jì)中厂榛,方法共享盖矫,屬性不共享,因此每個(gè)方法都需要self參數(shù)击奶,將目標(biāo)標(biāo)識(shí)符傳進(jìn)去處理辈双。
創(chuàng)建對象的流程,調(diào)用類的定制工廠函數(shù)Athlete(),然后python處理這行代碼時(shí)柜砾,它把工廠函數(shù)轉(zhuǎn)換為Athlete().__init__(a)調(diào)用湃望,這樣就將目標(biāo)標(biāo)識(shí)符傳進(jìn)去了,所以函數(shù)方法中self參數(shù)很重要痰驱。
“字典”——這是一個(gè)內(nèi)置的數(shù)據(jù)結(jié)構(gòu)喜爷,允許將數(shù)據(jù)值與鍵關(guān)聯(lián)
“鍵”——字典中查找的部分
“值”——字典中的數(shù)據(jù)部分(可以是任何值,也可以包括另一種數(shù)據(jù)結(jié)構(gòu))
“self”——這是一個(gè)方法參數(shù)萄唇,總是指向當(dāng)前對象實(shí)例
- 使用dict()工廠函數(shù)或使用{}可以創(chuàng)建一個(gè)空字典
- 要訪問一個(gè)名為person的字典中與鍵Name關(guān)聯(lián)的值檩帐,可以使用我們熟悉的中括號(hào)記法,person['Name']
- 類似列表與集合另萤,Python的字典會(huì)隨新數(shù)據(jù)增加到這個(gè)數(shù)據(jù)結(jié)構(gòu)中而動(dòng)態(tài)擴(kuò)大
- 可以先創(chuàng)建一個(gè)空字典:new_d=dict{}或new_d={}然后增加數(shù)據(jù)d['Name']='Eric Idle'來填充字典湃密,或者也可一次完成以上的全部工作:new_d={'Name':'Eric Idle'}
- 可以用class關(guān)鍵字定義一個(gè)類
- 類方法(代碼)與函數(shù)的定義基本相同,也就是說四敞,要用def關(guān)鍵字定義
- 類屬性(數(shù)據(jù))就像對象實(shí)例中的變量
- 可以在類中定義__init__()方法來初始化對象實(shí)例
- 類中定義的每個(gè)方法都必須提供self作為第一個(gè)參數(shù)
- 類中每個(gè)屬性前面都必須提供self作為第一個(gè)參數(shù)泛源,從而將數(shù)據(jù)與其實(shí)例關(guān)聯(lián)
- 類可以從零開始構(gòu)建也可以從Python的內(nèi)置類或從其他定制類繼承
- 類可以放到一個(gè)Python模塊中,并上傳到Pypi