摘要:函數的基本結構中的函數基本結構函數名參數列表語句幾點說明函數名的命名規則要符合中的命名要求。在中,將這種依賴關系,稱之為多態。不要期待在原處修改的函數會返回結果比如一定要之用括號調用函數不要在導入和重載中使用擴展名或路徑。
在本教程的開始部分,就已經引入了函數的概念:《永遠強大的函數》,之所以那時候就提到函數,是因為我覺得函數之重要,遠遠超過一般。這里,重回函數,一是復習,二是要在已經學習的基礎上,對函數有更深刻的理解。
函數的基本結構Python中的函數基本結構:
def 函數名([參數列表]): 語句
幾點說明:
函數名的命名規則要符合python中的命名要求。一般用小寫字母和單下劃線、數字等組合
def是函數的開始,這個簡寫來自英文單詞define,顯然,就是要定義一個什么東西
函數名后面是圓括號,括號里面,可以有參數列表,也可以沒有參數
千萬不要忘記了括號后面的冒號
語句,相對于def縮進,按照python習慣,縮進四個空格
看簡單例子,深入理解上面的要點:
>>> def name(): #定義一個無參數的函數,只是通過這個函數打印 ... print "qiwsir" #縮進4個空格 ... >>> name() #調用函數,打印結果 qiwsir >>> def add(x,y): #定義一個非常簡單的函數 ... return x+y #縮進4個空格 ... >>> add(2,3) #通過函數,計算2+3 5
注意上面的add(x,y)函數,在這個函數中,沒有特別規定參數x,y的類型。其實,這句話本身就是錯的,還記得在前面已經多次提到,在python中,變量無類型,只有對象才有類型,這句話應該說成:x,y并沒有嚴格規定其所引用的對象類型。
為什么?列位不要忘記了,這里的所謂參數,跟前面說的變量,本質上是一回事。python中不需要提前聲明變量,有的語言就需要聲明。只有當用到該變量的時候,才建立變量與對象的對應關系,否則,關系不建立。而對象才有不同的類型。那么,在add(x,y)函數中,x,y在引用對象之前,是完全自由的,也就是它們可以引用任何對象,只要后面的運算許可,如果后面的運算不許可,則會報錯。
>>> add("qiw","sir") #這里,x="qiw",y="sir",讓函數計算x+y,也就是"qiw"+"sir" "qiwsir" >>> add("qiwsir",4) Traceback (most recent call last): File "", line 1, in File " ", line 2, in add TypeError: cannot concatenate "str" and "int" objects #仔細閱讀報錯信息,就明白錯誤之處了
從實驗結果中發現:x+y的意義完全取決于對象的類型。在python中,將這種依賴關系,稱之為多態。這是python和其它的靜態語言的重要區別。在python中,代碼不關心特定的數據類型。
對于python中的多態問題,以后還會遇到,這里僅僅以此例子顯示一番。請看官要留心注意的:python中為對象編寫接口,而不是為數據類型。
此外,也可以將函數通過賦值語句,與某個變量建立引用關系:
>>> result = add(3,4) >>> result 7
在這里,其實解釋了函數的一個秘密。add(x,y)在被運行之前,計算機內是不存在的,直到代碼運行到這里的時候,在計算機中,就建立起來了一個對象,這就如同前面所學習過的字符串、列表等類型的對象一樣,運行add(x,y)之后,也建立了一個add(x,y)的對象,這個對象與變量result可以建立引用關系,并且add(x,y)將運算結果返回。于是,通過result就可以查看運算結果。
如果看官上面一段,感覺有點吃力或者暈乎,也不要緊,那就再讀一邊。是在搞不明白,就不要搞了。隨著學習的深入,它會被明白的。
調用函數扯了不少函數怎么編寫,到底編寫函數有什么用?在程序中怎么調用呢?
為什么要寫函數?從理論上說,不用函數,也能夠編程,我們在前面已經寫了一個猜數字的程序,在那么就沒有寫函數,當然,用python的函數不算了。現在之所以使用函數,主要是:
降低編程的難度,通常將一個復雜的大問題分解成一系列更簡單的小問題,然后將小問題繼續劃分成更小的問題,當問題細化為足夠簡單時,就可以分而治之。為了實現這種分而治之的設想,就要通過編寫函數,將各個小問題逐個擊破,再集合起來,解決大的問題。(看官請注意,分而治之的思想是編程的一個重要思想,所謂“分治”方法也。)
代碼重(chong,二聲音)用。在編程的過程中,比較忌諱同樣一段代碼不斷的重復,所以,可以定義一個函數,在程序的多個位置使用,也可以用于多個程序。當然,后面我們還會講到“模塊”(此前也涉及到了,就是import導入的那個東西),還可以把函數放到一個模塊中供其他程序員使用。也可以使用其他程序員定義的函數(比如import ...,前面已經用到了,就是應用了別人——創造python的人——寫好的函數)。這就避免了重復勞動,提供了工作效率。
這樣看來,函數還是很必要的了。廢話少說,那就看函數怎么調用吧。以add(x,y)為例,前面已經演示了基本調用方式,此外,還可以這樣:
>>> def add(x,y): #為了能夠更明了顯示參數賦值特點,重寫此函數 ... print "x=",x #分別打印參數賦值結果 ... print "y=",y ... return x+y ... >>> add(10,3) #x=10,y=3 x= 10 y= 3 13 >>> add(x=10,y=3) #同上 x= 10 y= 3 13 >>> add(y=10,x=3) #x=3,y=10 x= 3 y= 10 13 >>> add(3,10) #x=3,y=10 x= 3 y= 10 13
在定義函數的時候,參數可以想前面那樣,等待被賦值,也可以定義的時候就賦給一個默認值。例如:
>>> def times(x,y=2): #y的默認值為2 ... print "x=",x ... print "y=",y ... return x*y ... >>> times(3) #x=3,y=2 x= 3 y= 2 6 >>> times(x=3) #同上 x= 3 y= 2 6 >>> times(3,4) #x=3,y=4,y的值不再是2 x= 3 y= 4 12 >>> times("qiwsir") #再次體現了多態特點 x= qiwsir y= 2 "qiwsirqiwsir"
給列位看官提一個思考題,請在閑暇之余用python完成:寫兩個數的加、減、乘、除的函數,然后用這些函數,完成簡單的計算。
注意事項下面的若干條,是常見編寫代碼的注意事項:
別忘了冒號。一定要記住符合語句首行末尾輸入“:”(if,while,for等的第一行)
從第一行開始。要確定頂層(無嵌套)程序代碼從第一行開始。
空白行在交互模式提示符下很重要。模塊文件中符合語句內的空白行常被忽視。但是,當你在交互模式提示符下輸入代碼時,空白行則是會結束語句。
縮進要一致。避免在塊縮進中混合制表符和空格。
使用簡潔的for循環,而不是while or range.相比,for循環更易寫,運行起來也更快
要注意賦值語句中的可變對象。
不要期待在原處修改的函數會返回結果,比如list.append()
一定要之用括號調用函數
不要在導入和重載中使用擴展名或路徑。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37377.html
摘要:私有函數在某些時候,會看到有一種方法命名比較特別,是以雙劃線開頭的,將這類命名的函數方法稱之為私有函數。如果一個函數類方法或屬性的名字以兩個下劃線開始但不是結束它是私有的其它所有的都是公有的。比如前面反復提到的就是一個典型的專有方法。 在任何語言中,都會規定某些對象(屬性、方法、函數、類等)只能夠在某個范圍內訪問,出了這個范圍就不能訪問了。這是公、私之分。此外,還會專門為某些特殊的東西...
摘要:語句,遍列列表字符串字典集合等迭代器,依次處理迭代器中的每個元素。與配合使用處理在程序運行中出現的異常情況。表示此行為空,不運行任何操作。在迭代器函數內使用,用于返回一個元素。恭請到上瀏覽及時更新的教程零基礎學 小孩子剛剛開始學說話的時候,常常是一個字一個字地開始學,比如學說餃子,對他/她來講,似乎有點難度,大人也聰明,于是就簡化了,用餃餃來代替,其實就是讓孩子學會一個字就能表達。當然...
摘要:在對象接口后包裝其實現的細節,從而隔離了代碼的修改對用戶產生的影響。類提供了一個新的本地作用域,最小化了變量名沖突。類其實并沒有結束,不過本講座到此對類暫告一段。 前面對類的有關內容已經描述不少了,其實話題遠遠沒有結束,不過對于初學者,掌握這些已經算是入門,在以后的實踐中,還需要進行體會和感悟。 這幾天和幾個朋友以各種途徑討論過OOP的相關問題,他們是:令狐蟲、Frank、晉劍、小馮...
摘要:下面總結通過總結常見的函數參數定義方式,來理解參數傳遞的流程。這種方式最常見了,列出有限個數的參數,并且彼此之間用逗號隔開。而且,必須數量一致,一一對應。 就前面所講,函數的基本內容已經完畢。但是,函數還有很多值得不斷玩味的細節。這里進行闡述。 參數的傳遞 python中函數的參數通過賦值的方式來傳遞引用對象。下面總結通過總結常見的函數參數定義方式,來理解參數傳遞的流程。 def...
摘要:有的前面有空格,有的后面有空格去掉元素前后的空格這是一個有意思的內置函數,本來我們可以通過的方式得到一個的每個元素編號,然后在用的方式得到該元素。 對于list,由于她的確非常非常龐雜,在python中應用非常廣泛,所以,雖然已經介紹完畢了基礎內容,這里還要用一講深入一點點,往往越深入越... list解析 先看下面的例子,這個例子是想得到1到9的每個整數的平方,并且將結果放在li...
閱讀 1765·2021-09-22 15:10
閱讀 1261·2021-09-07 09:58
閱讀 2333·2019-08-30 15:44
閱讀 1634·2019-08-26 18:29
閱讀 2033·2019-08-26 13:35
閱讀 758·2019-08-26 13:31
閱讀 719·2019-08-26 11:42
閱讀 1065·2019-08-23 18:39