亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

跟老齊學Python之重回函數(shù)

 更新時間:2014年10月10日 09:30:33   投稿:hebedich  
在本教程的開始部分,就已經(jīng)引入了函數(shù)的概念:《永遠強大的函數(shù)》,之所以那時候就提到函數(shù),是因為我覺得函數(shù)之重要,遠遠超過一般。這里,重回函數(shù),一是復習,二是要在已經(jīng)學習的基礎上,對函數(shù)有更深刻的理解。

函數(shù)的基本結(jié)構(gòu)

Python中的函數(shù)基本結(jié)構(gòu):

復制代碼 代碼如下:

def 函數(shù)名([參數(shù)列表]):

    語句

 幾點說明:
 •函數(shù)名的命名規(guī)則要符合python中的命名要求。一般用小寫字母和單下劃線、數(shù)字等組合
 •def是函數(shù)的開始,這個簡寫來自英文單詞define,顯然,就是要定義一個什么東西
 •函數(shù)名后面是圓括號,括號里面,可以有參數(shù)列表,也可以沒有參數(shù)
 •千萬不要忘記了括號后面的冒號
 •語句,相對于def縮進,按照python習慣,縮進四個空格

看簡單例子,深入理解上面的要點:

復制代碼 代碼如下:

>>> def name():         #定義一個無參數(shù)的函數(shù),只是通過這個函數(shù)打印
...     print "qiwsir"  #縮進4個空格
...
>>> name()              #調(diào)用函數(shù),打印結(jié)果
qiwsir

>>> def add(x,y):       #定義一個非常簡單的函數(shù)
...     return x+y      #縮進4個空格
...
>>> add(2,3)            #通過函數(shù),計算2+3
5

 注意上面的add(x,y)函數(shù),在這個函數(shù)中,沒有特別規(guī)定參數(shù)x,y的類型。其實,這句話本身就是錯的,還記得在前面已經(jīng)多次提到,在python中,變量無類型,只有對象才有類型,這句話應該說成:x,y并沒有嚴格規(guī)定其所引用的對象類型。

為什么?列位不要忘記了,這里的所謂參數(shù),跟前面說的變量,本質(zhì)上是一回事。python中不需要提前聲明變量,有的語言就需要聲明。只有當用到該變量的時候,才建立變量與對象的對應關系,否則,關系不建立。而對象才有不同的類型。那么,在add(x,y)函數(shù)中,x,y在引用對象之前,是完全自由的,也就是它們可以引用任何對象,只要后面的運算許可,如果后面的運算不許可,則會報錯。

復制代碼 代碼如下:

>>> add("qiw","sir")    #這里,x="qiw",y="sir",讓函數(shù)計算x+y,也就是"qiw"+"sir"
'qiwsir'

>>> add("qiwsir",4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in add
TypeError: cannot concatenate 'str' and 'int' objects  #仔細閱讀報錯信息,就明白錯誤之處了

 從實驗結(jié)果中發(fā)現(xiàn):x+y的意義完全取決于對象的類型。在python中,將這種依賴關系,稱之為多態(tài)。這是python和其它的靜態(tài)語言的重要區(qū)別。在python中,代碼不關心特定的數(shù)據(jù)類型。

對于python中的多態(tài)問題,以后還會遇到,這里僅僅以此例子顯示一番。請看官要留心注意的:python中為對象編寫接口,而不是為數(shù)據(jù)類型。

此外,也可以將函數(shù)通過賦值語句,與某個變量建立引用關系:

復制代碼 代碼如下:

>>> result = add(3,4)
>>> result
7

 在這里,其實解釋了函數(shù)的一個秘密。add(x,y)在被運行之前,計算機內(nèi)是不存在的,直到代碼運行到這里的時候,在計算機中,就建立起來了一個對象,這就如同前面所學習過的字符串、列表等類型的對象一樣,運行add(x,y)之后,也建立了一個add(x,y)的對象,這個對象與變量result可以建立引用關系,并且add(x,y)將運算結(jié)果返回。于是,通過result就可以查看運算結(jié)果。

如果看官上面一段,感覺有點吃力或者暈乎,也不要緊,那就再讀一邊。是在搞不明白,就不要搞了。隨著學習的深入,它會被明白的。

調(diào)用函數(shù)

扯了不少函數(shù)怎么編寫,到底編寫函數(shù)有什么用?在程序中怎么調(diào)用呢?

為什么要寫函數(shù)?從理論上說,不用函數(shù),也能夠編程,我們在前面已經(jīng)寫了一個猜數(shù)字的程序,在那么就沒有寫函數(shù),當然,用python的函數(shù)不算了?,F(xiàn)在之所以使用函數(shù),主要是:
 1.降低編程的難度,通常將一個復雜的大問題分解成一系列更簡單的小問題,然后將小問題繼續(xù)劃分成更小的問題,當問題細化為足夠簡單時,就可以分而治之。為了實現(xiàn)這種分而治之的設想,就要通過編寫函數(shù),將各個小問題逐個擊破,再集合起來,解決大的問題。(看官請注意,分而治之的思想是編程的一個重要思想,所謂“分治”方法也。)
 2.代碼重(chong,二聲音)用。在編程的過程中,比較忌諱同樣一段代碼不斷的重復,所以,可以定義一個函數(shù),在程序的多個位置使用,也可以用于多個程序。當然,后面我們還會講到“模塊”(此前也涉及到了,就是import導入的那個東西),還可以把函數(shù)放到一個模塊中供其他程序員使用。也可以使用其他程序員定義的函數(shù)(比如import ...,前面已經(jīng)用到了,就是應用了別人——創(chuàng)造python的人——寫好的函數(shù))。這就避免了重復勞動,提供了工作效率。
 
這樣看來,函數(shù)還是很必要的了。廢話少說,那就看函數(shù)怎么調(diào)用吧。以add(x,y)為例,前面已經(jīng)演示了基本調(diào)用方式,此外,還可以這樣:

復制代碼 代碼如下:

>>> def add(x,y):       #為了能夠更明了顯示參數(shù)賦值特點,重寫此函數(shù)
...     print "x=",x    #分別打印參數(shù)賦值結(jié)果
...     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

 在定義函數(shù)的時候,參數(shù)可以想前面那樣,等待被賦值,也可以定義的時候就賦給一個默認值。例如:

復制代碼 代碼如下:

>>> 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")         #再次體現(xiàn)了多態(tài)特點
x= qiwsir
y= 2
'qiwsirqiwsir'

 給列位看官提一個思考題,請在閑暇之余用python完成:寫兩個數(shù)的加、減、乘、除的函數(shù),然后用這些函數(shù),完成簡單的計算。

注意事項

下面的若干條,是常見編寫代碼的注意事項:
 1.別忘了冒號。一定要記住符合語句首行末尾輸入“:”(if,while,for等的第一行)
 2.從第一行開始。要確定頂層(無嵌套)程序代碼從第一行開始。
 3.空白行在交互模式提示符下很重要。模塊文件中符合語句內(nèi)的空白行常被忽視。但是,當你在交互模式提示符下輸入代碼時,空白行則是會結(jié)束語句。
 4.縮進要一致。避免在塊縮進中混合制表符和空格。
 5.使用簡潔的for循環(huán),而不是while or range.相比,for循環(huán)更易寫,運行起來也更快
 6.要注意賦值語句中的可變對象。
 7.不要期待在原處修改的函數(shù)會返回結(jié)果,比如list.append()
 8.一定要之用括號調(diào)用函數(shù)
 9.不要在導入和重載中使用擴展名或路徑。

相關文章

最新評論