Python學習之抽象

2021-06-27 23:00:38 字數 2709 閱讀 5646

1.python可以為函式指定別名,import math; y = math.sqrt; callable(y): true #判斷是否可呼叫,即是否是函式

2.函式與條件語句以及迴圈語句一樣,也是通過縮進來識別,不同的是,由於函式用於重複呼叫,所以需要為其指定乙個別名,乙個標號:

def hello(name): #冒號不可忽略

print 'hello, '+name+'!'

return true #可忽略,函式頭不需要新增標示指定是否需要返回值

>>>hello("joy")

hello, joy!

3.有時為了給定義的函式寫一段注釋用以說明函式的作用,在c++中是直接在函式前方以注釋方式給出,而python則是通過新增說明文件的方式給出,說明語句一般以字串形式給出,直接放置在def語句下面(類定義也是如此),當呼叫時,只需使用hello.__doc__(注意,是雙下滑線)即可得到說明語句,也可用help(example)方式得到:

def example():

'this is an example, indentation as well'

return none

5.當函式中傳遞的引數數目過多時,可以通過只提供乙個引數名字,並在此引數前加上*,如此即可將所有輸入的引數統一到乙個元組中:

def print_par(*param):

print param

>>>print_par("name")

('name',)

>>>print_par(1,2,3)

(1,2,3)

不過,此方法在輸入引數中包含關鍵字(或者說變數名並賦予預設值),會報錯

>>>print_par("name",test=42) #報錯

另外,也可在引數前加兩個*,表示輸入的一系列關鍵字,當輸出時,會以字典的形式輸出,不過正如*param只能覆蓋非關鍵字一樣,**param也只能覆蓋關鍵字引數,所以如果乙個函式的輸入同時包含兩類引數時,須分開新增兩個引數,並確保順序。

最後,將若干引數輸入到乙個只給了乙個加*引數的函式中,這些引數均會轉換為乙個元組的相應元素,反之,如果將乙個元組實參通過加*方式輸入到具有若干形參的函式中,也可以將此元組解開分配到相應的形參上,相當於上述過程的逆過程,不過要保證引數數目的匹配。

6.python的內建函式vars()可以將當前所有變數與值組成的字典返回:

>>>x=1

>>>scope=vars()

>>>scope['x]

1不過,雖然可以修改,但是一般來說,避免出現不可知錯誤,vars返回的字典是不能修改的

7.函式會新開乙個作用域,自動遮蔽掉全域性作用域,當需要在區域性作用域中訪問全域性作用域中元素時,需要顯示指定此元素為全域性變數global x;#如此,當使用x時將自動從全域性變數中搜尋

8.類的建立:#表明此類有乙個成員,名為name,self是保留關鍵字,用以指明此函式時成員函式

class person():

def setname(self,name):

self.name = name #表明此類有乙個成員,名為name,self是保留關鍵字,用以指明此函式時成員函式

def getname(self):

return self.name

#def test():

#print "good" #如此定義會返回異常,成員函式必須要包含self變數

>>>foo = person()

>>>foo.setname("john")

>>>foo.getname()

"john"

此類中雖沒有顯式定義成員變數,但實際上已經暗含了乙個成員變數name,而實際上,在python中,也可以像c++一樣,顯式定義成員變數並可以賦予初值(此處不同於c++,c++除了靜態整型變數外不允許在類內初始化,而python則必須初始化,否則會報錯,就相當於在編譯器中直接輸入乙個從未使用過的標示一般,會報錯未定義),而類內變數的作用由於python的引用計數機制,實際上的作用相當於c++的靜態成員變數,另外,python中與c++不同的是,python在傳遞函式指標時,不需要新增括號:

>>>setn = foo.setname

>>>getn = foo.getname

>>>setn("john")

>>>getn

"john"

結果跟上面一種方法完全相同

9.python中也可以定義私有方法,只需要方法前加雙下劃線,即可,如此,方法將不能從類外訪問,而對於類內的訪問則無所阻礙,但實際上python對於此類方法的處理是將之翻譯成方法名(不包括雙下劃線)前面加上_secretive_,所以實際上可以通過修改**為此類方法名即可正常訪問,但是實際上不提倡這種訪問方式。

10.python中的類定義實際上是在執行**塊,如果在類定義中新增一句print語句,將會在類定義結束時,完成此語句

11.python中的類繼承定義方式如下:

class deprive(base1,base2): #多個基類用逗號隔開,如此實現多重繼承

def combine(self):

self.name = base1.name + base2.name

>> 多重繼承中,如果出現不同基類的同名方法衝突,則按照繼承順序定義優先順序

>> 在繼承中,如果基類定義了__init__(self,...)初始化方法,則在子類中必須顯示呼叫進行初始化(因為不能預設進行初始化)

>> 在呼叫方法時,會首先從子類中進行查詢,之後按照繼承順序依次從基類中查詢

>> 詳細可以參見

python學習筆記之五 抽象

本文會介紹如何將語句組織成函式,還會詳細介紹引數和作用域的概念,以及遞迴的概念及其在程式中的用途。一.建立函式 函式是可以呼叫,它執行某種行為並且返回乙個值。用def語句即可定義乙個函式 並非所有的函式都會返回一些東西 def fibs num result 0,1 for i in range n...

Python學習筆記 抽象

物件導向 物件 例項 由資料及其能對其實施的操作所構成的封裝體。類 描述了物件的特徵 資料和操作 類的定義 class classname object define classname class class suite 類的方法 class dog object def greet self p...

python之更加抽象 2014 4 6

更加抽象 12 50pm 14 50 p112 1.物件的魔力 多型 如count 在多種資料型別中都可以實現計數的功能 封裝 對全域性作用域中其他區域隱藏多餘資訊的原則 繼承2.類和型別 建立類class person def setname self,name self.name name de...