Python基礎-week02,python-week02
本節內容摘要:0.xmind8破解及安裝(想要破解版及資料請下方留言,這裡不做具體說明)1.模組初識2.pyc是什麼?3.python資料類型(bytes資料類型,資料運算子和拾遺)4.列表的使用1-2
5.元組 練習:購物車程式練習及執行個體
6.字串常用操作
7.字典的使用 練習:三級菜單一實例
8.作業:購物車最佳化
一.模組初識
import匯入Py內建模組例如os,sys等及其自己編寫的Py檔案,匯入到其他檔案中,預設尋找目前的目錄。如果不在同一目錄,會報錯,將該自訂py檔案模組放到site-packages目錄裡,其他方法會在後面筆記中中講解。
Python的強大之處在於他有非常豐富和強大的標準庫和第三方庫,幾乎你想實現的任何功能都有相應的Python庫支援,以後的課程中會深入講解常用到的各種庫,現在,我們先來象徵性的學2個簡單的。
sys:
import sys
print(sys.argv)
os:
import os
os.system("df -h") #調用系統命令
import os sys
os.system(''.join(sys.argv[1:])) #把使用者的輸入的參數當作一條命令交給os.system來執行
二.pyc是什麼?
在說這個問題之前,我們先來說兩個概念,PyCodeObject和pyc檔案。
我們在硬碟上看到的pyc自然不必多說,而其實PyCodeObject則是Python編譯器真正編譯成的結果。我們先簡單知道就可以了,繼續向下看。
當python程式運行時,編譯的結果則是儲存在位於記憶體中的PyCodeObject中,當Python程式運行結束時,Python解譯器則將PyCodeObject寫回到pyc檔案中。
當python程式第二次運行時,首先程式會在硬碟中尋找pyc檔案,如果找到,則直接載入,否則就重複上面的過程。
所以我們應該這樣來定位PyCodeObject和pyc檔案,我們說pyc檔案其實是PyCodeObject的一種持久化儲存方式。
總結:pyc其實就是Python 先行編譯的的一個檔案,每次運行py檔案時候,會檢測該pyc檔案是否存在,如果不存在重新編譯產生,如果存在會檢查pyc和源檔案哪個更新時間最新,如果源檔案沒有更新直接從Pyc檔案執行速度快,如果源檔案已經更新了呢,則會編譯最新源檔案產生Pyc檔案。
三.python資料類型
1.數值型
整型(int):在32位機器上,整數的位元為32位,取值範圍為-2**31~2**31-1,即-2147483648~2147483647
在64位系統上,整數的位元為64位,取值範圍為-2**63~2**63-1,即-9223372036854775808~9223372036854775807
浮點型(float):浮點數用來處理實數,即帶有小數的數字。類似於C語言中的double類型,佔8個位元組(64位),其中52位表示底,11位表示指數,剩下的一位表示符號。
浮點數的例子:3.14和52.3E-4,其中E表示10冪次方,這裡表示52.3*10**-4次方的縮寫。
複數(complex):例如3+4j,由實數和虛數構成,如果要遍曆複數,需要分別遍曆實數和虛數部分。
2.字串
python中的字串在C語言中體現為是一個字元數組,每次建立字串時候需要在記憶體中開闢一塊連續的空,並且一旦需要修改字串的話,就需要再次開闢空間,萬惡的+號每出現一次就會在內從中重新開闢一塊空間。
字串格式化輸出
name = "alex"print "i am %s " % name #輸出: i am alex
PS: 字串是 %s;整數 %d;浮點數%f
字串常用功能:
移除空白:strip()去首尾,lstrip()去左邊,rstrip()去右邊
分割:split(',')
長度:len()
索引:zifucuan[i]
切片:zifucuan[1:4]
替換:replace('c1','c2'):把字串裡的c1替換成c2。故可以用replace(' ','')來去掉字串裡的所有空格
3.列表
建立列表:
name_list = ['alex', 'seven', 'eric']或name_list = list(['alex', 'seven', 'eric'])
基本操作:
索引:從0開始,list[-1]為非空列表最後一個
切片:list[1:5]
追加:list.append()
刪除:list..pop()/list.remove()/del list
長度:len()
迴圈:for i in list:
包含:(元組)
4.元祖(不可變的列表)
常用操作:與列表操作一樣。
ages = (11, 22, 33, 44, 55)或ages = tuple((11, 22, 33, 44, 55))
5.字典
建立字典:
person = {"name": "mr.wu", 'age': 18}或person = dict({"name": "mr.wu", 'age': 18})
常用操作:
索引
新增
刪除
鍵、值、索引值對
迴圈
長度
6.布爾類型
True/False
7.None
***************資料運算子及其優先順序:
**********拾遺:
1.三元運算
格式:retsult =值1 if 條件 else 值2
條件為真,輸出result=值1
條件為假,輸出result=值2
例子:a,b,c=1,3.5
d=a if a>b else c
會輸出d=5
d=a if a<b else c
會輸出d=1
2.進位
a.二進位 01
b.八進位 01234567
c.十進位 0123456789
d.十六進位 0123456789ABCDEF,首碼標記法BH,尾碼標記法0x53
瞭解一下二進位轉換成16進位的方法!
3.對象
你找到對象了嗎?
在python裡一切事物皆對象,以後別再告訴別人你沒有對象啦,對象基於類建立,例如清純類、成熟類、萌妹子類,魅惑類,知性類......
******************bytes資料類型:
(1)Python 3最重要的新特性之一是對字串和位元據流做了明確的區分。文本總是Unicode,由str類型表示,位元據則由bytes類型表示。Python 3不會以任意隱式的方式混用str和bytes,你不能拼接字串和位元組流,也無法在位元組流裡搜尋字串(反之亦然),也不能將字串傳入參數為位元組流的函數(反之亦然)。
(2)bytes和str的差異:
回到bytes和str的身上。bytes是一種位元流,它的存在形式是01010001110這種。我們無論是在寫代碼,還是閱讀文章的過程中,肯定不會有人直接閱讀這種位元流,它必須有一個編碼方式,使得它變成有意義的位元流,而不是一堆晦澀難懂的01組合。因為編碼方式的不同,對這個位元流的解讀也會不同,對實際使用造成了很大的困擾。下面讓我們看看Python是如何處理這一系列編碼問題的:
>>> s = "中文"
>>> s '中文'
>>> type(s) <class 'str'>
>>> b = bytes(s, encoding='utf-8')
>>> b b'\xe4\xb8\xad\xe6\x96\x87'
>>> type(b) <class 'bytes'>
(3).如bytes與str的相互轉換:我們都知道,字串類str裡有一個encode()方法,它是從字串向位元流的編碼過程。而bytes類型恰好有個decode()方法,它是從位元流向字串解碼的過程。除此之外,我們查看Python源碼會發現bytes和str擁有幾乎一模一樣的方法列表,最大的區別就是encode和decode。
從實質上來說,字串在磁碟上的儲存形式也是01的組合,也需要編碼解碼。
如果,上面的闡述還不能讓你搞清楚兩者的區別,那麼記住下面兩幾句話:
在bytes和str的互相轉換過程中,實際就是編碼解碼的過程,必須顯式地指定編碼格式。
#Author Jame-Mei
msg1='我愛中國'
print (msg1)
print ("\n將str轉換成bytes編碼:")
print (msg1.encode(encoding='utf-8'))
#python3預設為utf-8,python2.x如果沒有utf-8會報錯!!
print ('\n將bytes轉換成str:')
print (b'\xe6\x88\x91\xe7\x88\xb1\xe4\xb8\xad\xe5\x9b\xbd'.decode(encoding='utf-8'))
(4).為何要bytes和str相互轉換呢?
涉及python網路編程,將str字串類型轉換成bytes類型進行通訊和傳輸。