python學習小筆記一
資料型別
整數,包括負整數,為方便用十六進位制表示整數,字首為0x,如0xff00。
浮點數,對於很大或很小的浮點數,就必須用科學計數法表示,把10用e替代,1.23x10^9就是1.23e9
,或者12.3e8
,0.000012可以寫成1.2e-5。
字串,如果字串內部既包含'
又包含"
怎麼辦?可以用轉義字元\
來標識,轉義字元\
可以轉義很多字元,比如\n
表示換行,\t
表示製表符,字元\
本身也要轉義,所以\\
表示的字元就是\,
如果字串裡面有很多字元都需要轉義,就需要加很多\
,為了簡化,Python還允許用r''
表示''
內部的字串預設不轉義。如果字串內部有很多換行,用\n
寫在一行裡不好閱讀,為了簡化,Python允許用'''...'''
/除法的兩個整數計算結果是浮點數,//地板除的兩個整數結果是整數,%取餘。
編碼
8 bit(位元)= 1 byte(位元組)
對於單個字元的編碼,Python提供了ord()
函式獲取字元的整數表示,chr()
函式把編碼轉換為對應的字元:
以Unicode表示的str
通過encode()
方法可以編碼為指定的bytes
反過來,如果我們從網路或磁碟上讀取了位元組流,那麼讀到的資料就是bytes
。要把bytes
變為str
,就需要用decode()
方法
要計算str
包含多少個字元,可以用len()
函式
1箇中文字元經過UTF-8編碼後通常會佔用3個位元組,而1個英文字元只佔用1個位元組
python讀檔案通常在開頭加這兩句
#!/usr/bin/env python3 第一行註釋是為了告訴Linux/OS X系統,這是一個Python可執行程式,Windows系統會忽略這個註釋
# -*- coding: utf-8 -*- 第二行註釋是為了告訴Python直譯器,按照UTF-8編碼讀取原始碼,否則,你在原始碼中寫的中文輸出可能會有亂碼
另一種格式化字串的方法是使用字串的format()
方法,它會用傳入的引數依次替換字串內的佔位符{0}
、{1}
……,不過這種方式寫起來比%要麻煩得多
常見佔位符:%d整數,%f浮點數,%s字串,%x十六進位制整數
列表
list是一種有序的集合,可以隨時新增和刪除其中的元素。
list是一個可變的有序表,所以,可以往list中追加元素到末尾:classmated.append('Adam')
把元素插入到指定的位置,比如索引號為1
的位置:classmates.insert(1,'Jack')
要刪除指定位置的元素,用pop(i)
方法,其中i
是索引位置:classmates.pop(1)
要把某個元素替換成別的元素,可以直接賦值給對應的索引位置:classmates[1]='Mike'
另一種有序列表叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改.
只有1個元素的tuple定義時必須加一個逗號,
,來消除歧義:t=(1,)
dict字典,key-value儲存,判斷key是否存在,'name' in d。d.get()函式。
通過key計算位置的演算法稱為雜湊演算法(Hash)
set和dict類似,也是一組key的集合,但不儲存value。由於key不能重複,所以,在set中,沒有重複的key。
pass
語句什麼都不做,那有什麼用?實際上pass
可以用來作為佔位符,比如現在還沒想好怎麼寫函式的程式碼,就可以先放一個pass
,讓程式碼能執行起來。
如果你已經把my_abs()
的函式定義儲存為abstest.py
檔案了,那麼,可以在該檔案的當前目錄下啟動Python直譯器,用from abstest import my_abs
來匯入my_abs()
函式,注意abstest
是檔名。
自定義函式
定義預設引數要牢記一點:預設引數必須指向不變物件!
定義可變引數和定義一個list或tuple引數相比,僅僅在引數前面加了一個*
號。在函式內部,引數numbers
接收到的是一個tuple,因此,函式程式碼完全不變。但是,呼叫該函式時,可以傳入任意個引數,包括0個引數。
*nums
表示把nums
這個list的所有元素作為可變引數傳進去。這種寫法相當有用,而且很常見。
**extra
表示把extra
這個dict的所有key-value用關鍵字引數傳入到函式的**kw
引數,kw
將獲得一個dict,注意kw
獲得的dict是extra
的一份拷貝,對kw
的改動不會影響到函式外的extra
。
命名關鍵字引數需要一個特殊分隔符*
,*
後面的引數被視為命名關鍵字引數。