資料型別:
python 中的基本資料型別有:數字,字串,布林值以及空值
想使自己的**支援中文在python **的檔案頭加上
# -×- coding:utf-8 -×-
python中的高階資料結構包括:list,tuple,dict和set
list:有序集合,可以任意新增和刪除其中的元素
定義:list=['a','b']
tuple:有序集合,但進行過初始化後就不能改變其中的元素的值,也不能進行新增和刪除
定義:tuple=('a','b')
dict:使用一對一的鍵值儲存,具有極快的查詢速度
定義:dict=
set:一組沒有重複的key 的組合,但不儲存value
定義:s=set([1,2,3])
判斷和迴圈語句:
if condition:
pass
elif condition:
pass
else:
pass
if語句從上向下判斷,如果乙個語句被判斷為true,則不會執行剩下的語句。
迴圈分為兩種:
一中是for...in...迴圈,依次把list或者tuple的每個元素迭代出來
for x in range(100):
pass
一種是while迴圈:
while condition:
pass
函式:定義:
def function(argv='abc'): #如果沒有給argv賦值,則採用'abc'這個預設值
pass
返回多值:
def function(argv,argv):
return x,y
x,y = function(argv,argv)
但其實返回的是乙個tuple,可以省略括號,多個變數可以接收乙個tuple,按順序賦給對應的值。
可變引數:
def function(*numbers):
pass
其實傳進函式的是乙個tuple,進入函式之後再用for 迴圈進行分解。
在向可變引數的函式傳遞list或者tuple的時候如下加乙個星號:
nums = [1,2,3]
function(*nums)
關鍵字引數:
關鍵字引數允許傳入0個或者任意個引數名的引數,這些關鍵字引數,在函式的內部自動組成乙個dict
定義:def person(name,age,**kw):
print 'name:',name,'age:',age,'other:',kw
#kw引數也傳進來乙個鍵值對。
在python的函式定義中,可以必選引數,預設引數,可變引數和關鍵字引數四種引數型別一起使用。或者只用其中的一些。但是,引數的定義順序必須是,必選引數,預設引數,可變引數以及關鍵字引數。
如:def func(a,b,c=0,*argv,**kw):
總結:*argv 是可變引數,接收的是乙個tuple,**kw是關鍵字引數,接收的是乙個dict。
高階特性:
for 迴圈可以同時使用兩個甚至多個變數,例如dict的iteritems()可以同時迭代key和value.
d =
for k,v in d.iteritems()
print k , '=', v
使用內建的isinstance函式可以判斷乙個變數的型別
isinstance(x,str/int)
函式式程式設計:
高階函式:
map(),reduce(),sorted(),reversed_cmp()
匿名函式:
lambda x:
pass
關鍵字lamba表示匿名函式,冒號前面的x表示函式引數。
匿名函式只能有乙個表示式,並且不用寫return,返回值就是該表示式的結果。
使用匿名函式有個好處,因為函式沒有名字,所以不用擔心函式名衝突。
f=lambda x: x*x
print f(5)
#python 對匿名函式支援有限,盡量只在一些簡單的情況下使用。
裝飾器:
@log
deg f():
pass
def log(func):
def decorator(func):
pass
return func()
return decorator
主要是為了許可權認證以及日誌的列印
模組:物件導向程式設計:
類的定義:
class 類名():
def func():
pass
類中的方法和普通的函式只有一點不同,那就是第乙個引數永遠是self,並且呼叫時不用傳遞該引數
訪問限制:
類似__name,__score 的是私有變數,在類外不能直接訪問
類似__name__的是類內建的特殊變數,在類外是可以直接訪問的
繼承和多型:
一般類全部繼承自object
class animal(object):
pass
class person(object):
pass
一般繼承的定義:
class dog(animal):
pass
同樣可以從多個類進行繼承:
class mary(dog,person):
pass
所有的子類自動繼承了父類所有的方法,也可以對這些方法進行重寫覆蓋。
而判斷乙個例項是否是某個型別同樣可以使用isinstance 進行判斷
isinstance(harry,dog)
也可以使用type()函式,進行判斷
使用getattr(),setattr(),hasattr()函式我們可以直接操作乙個例項的狀態。例如:
class myobject(object):
def __init__(self):
self.x=9
def power(self):
return self.x * self.x
obj = myobject()
hasattr(obj,'x')#判斷是否具有x屬性
setattr(obj,'x',19)#將x屬性設定為19
y = getattr(obj,'x')#獲取屬性x
如果試圖獲取不存在的屬性將會丟擲attributeerror的錯誤
上述函式不僅可以獲取例項的屬性,而且可以獲取例項的方法
hasattr(obj,'power')
getattr(obj,'power')
可以在例項建立之後給例項增加屬性或者方法,但是增加的屬性和方法對其他例項是不起作用的。
mary = myobject()
mary.name = 'mary' #增加了乙個name的屬性
def set_age(self,age)
self.age = age
from types import methodtype
mary.set_age = methodtype(set_age,mary,myobject)#給例項增加了乙個方法
如果我們想要限制類可以增加的屬性可以使用__slots__屬性
class student(object):
__slots__ = ('name','age')
這樣student類的例項可以增加name 和age 屬性。但是__slots__是不可以繼承的,在子類中必須要重新定義。
使用@property
property有兩種方法,setter()和getter(),使用property則預設呼叫了getter(),而setter()則是可選的。
定義方法:
在getter()函式塊上註明@property
而在setter()函式塊上註明@函式名.setter,如:
class student(object):
@property
def birth(self):
return self._birth
@birth.setter
def birth(self,value):
self._birth = value
@property
def age(self):
return 2014 - self._birth
birth 是可讀寫操作,而age只是乙個唯讀操作
類裡面可以定製的方法:
__str__,用來列印例項內的字串
__iter__,使類可以用於for..in..迴圈
__getitem__,_getattr__,__call__
錯誤處理:
try:
要執行的語句塊
except 錯誤型別:
對錯誤進行處理的語句
呼叫堆疊:
如果錯誤沒有**獲,他就會一直往上拋,最後被python直譯器捕獲,列印乙個錯誤資訊。然後程式退出。
一般出錯的根源在錯誤資訊的最後一行。
記錄錯誤:
python 內建的logging模組可以用來記錄錯誤資訊。並且在列印完錯誤資訊以後程式依舊會繼續執行。
資訊的級別:debug,info,warning,error
丟擲錯誤:
使用raise語句來丟擲錯誤。
try:
10/0
except zerodivisionerror:
raise valueerror('input error!')
資料庫操作:
總結自: (乙個比較好的python 教程)
python學習總結
那我們先來認識一下python。python首先是一門計算機語言 是集編譯性和解釋性一身的語言。python目前在做科學計算中特別受歡迎,說到計算,我們不得不提matlab,就我個人而言,matlab,我已經接觸這麼語言4年多了,我也十分的偏愛它,可是matlab是收費的,相比而言,python是免...
Python學習總結
當前使用python語言即使寫乙個for迴圈都要查資料,實屬不該。後續把學習的東西持續總結在這裡,讓自己印象更深刻一些。stata statb startc 這三行會當成乙個語句進行執行 this is a single line remark this is multiple lines rema...
python學習總結
py檔案模組匯入 假設我src下有test.py和util資料夾,util裡有fileclass,fileclass裡有方法writeline,我要在test.py呼叫fileclass裡的writeline方法.有以下3種引入方式 方式1 from util.fileclass import wr...