成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[零基礎(chǔ)學(xué)python]重回函數(shù)

dmlllll / 2996人閱讀

摘要:函數(shù)的基本結(jié)構(gòu)中的函數(shù)基本結(jié)構(gòu)函數(shù)名參數(shù)列表語句幾點(diǎn)說明函數(shù)名的命名規(guī)則要符合中的命名要求。在中,將這種依賴關(guān)系,稱之為多態(tài)。不要期待在原處修改的函數(shù)會(huì)返回結(jié)果比如一定要之用括號(hào)調(diào)用函數(shù)不要在導(dǎo)入和重載中使用擴(kuò)展名或路徑。

在本教程的開始部分,就已經(jīng)引入了函數(shù)的概念:《永遠(yuǎn)強(qiáng)大的函數(shù)》,之所以那時(shí)候就提到函數(shù),是因?yàn)槲矣X得函數(shù)之重要,遠(yuǎn)遠(yuǎn)超過一般。這里,重回函數(shù),一是復(fù)習(xí),二是要在已經(jīng)學(xué)習(xí)的基礎(chǔ)上,對(duì)函數(shù)有更深刻的理解。

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

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

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

    語句

幾點(diǎn)說明:

函數(shù)名的命名規(guī)則要符合python中的命名要求。一般用小寫字母和單下劃線、數(shù)字等組合

def是函數(shù)的開始,這個(gè)簡寫來自英文單詞define,顯然,就是要定義一個(gè)什么東西

函數(shù)名后面是圓括號(hào),括號(hào)里面,可以有參數(shù)列表,也可以沒有參數(shù)

千萬不要忘記了括號(hào)后面的冒號(hào)

語句,相對(duì)于def縮進(jìn),按照python習(xí)慣,縮進(jìn)四個(gè)空格

看簡單例子,深入理解上面的要點(diǎn):

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

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

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

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

>>> add("qiw","sir")    #這里,x="qiw",y="sir",讓函數(shù)計(jì)算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ì)閱讀報(bào)錯(cuò)信息,就明白錯(cuò)誤之處了

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

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

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

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

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

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

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

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

為什么要寫函數(shù)?從理論上說,不用函數(shù),也能夠編程,我們?cè)谇懊嬉呀?jīng)寫了一個(gè)猜數(shù)字的程序,在那么就沒有寫函數(shù),當(dāng)然,用python的函數(shù)不算了?,F(xiàn)在之所以使用函數(shù),主要是:

降低編程的難度,通常將一個(gè)復(fù)雜的大問題分解成一系列更簡單的小問題,然后將小問題繼續(xù)劃分成更小的問題,當(dāng)問題細(xì)化為足夠簡單時(shí),就可以分而治之。為了實(shí)現(xiàn)這種分而治之的設(shè)想,就要通過編寫函數(shù),將各個(gè)小問題逐個(gè)擊破,再集合起來,解決大的問題。(看官請(qǐng)注意,分而治之的思想是編程的一個(gè)重要思想,所謂“分治”方法也。)

代碼重(chong,二聲音)用。在編程的過程中,比較忌諱同樣一段代碼不斷的重復(fù),所以,可以定義一個(gè)函數(shù),在程序的多個(gè)位置使用,也可以用于多個(gè)程序。當(dāng)然,后面我們還會(huì)講到“模塊”(此前也涉及到了,就是import導(dǎo)入的那個(gè)東西),還可以把函數(shù)放到一個(gè)模塊中供其他程序員使用。也可以使用其他程序員定義的函數(shù)(比如import ...,前面已經(jīng)用到了,就是應(yīng)用了別人——?jiǎng)?chuàng)造python的人——寫好的函數(shù))。這就避免了重復(fù)勞動(dòng),提供了工作效率。

這樣看來,函數(shù)還是很必要的了。廢話少說,那就看函數(shù)怎么調(diào)用吧。以add(x,y)為例,前面已經(jīng)演示了基本調(diào)用方式,此外,還可以這樣:

>>> def add(x,y):       #為了能夠更明了顯示參數(shù)賦值特點(diǎn),重寫此函數(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í)候,參數(shù)可以想前面那樣,等待被賦值,也可以定義的時(shí)候就賦給一個(gè)默認(rèn)值。例如:

>>> def times(x,y=2):       #y的默認(rèn)值為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)特點(diǎn)
x= qiwsir
y= 2
"qiwsirqiwsir"

給列位看官提一個(gè)思考題,請(qǐng)?jiān)陂e暇之余用python完成:寫兩個(gè)數(shù)的加、減、乘、除的函數(shù),然后用這些函數(shù),完成簡單的計(jì)算。

注意事項(xiàng)

下面的若干條,是常見編寫代碼的注意事項(xiàng):

別忘了冒號(hào)。一定要記住符合語句首行末尾輸入“:”(if,while,for等的第一行)

從第一行開始。要確定頂層(無嵌套)程序代碼從第一行開始。

空白行在交互模式提示符下很重要。模塊文件中符合語句內(nèi)的空白行常被忽視。但是,當(dāng)你在交互模式提示符下輸入代碼時(shí),空白行則是會(huì)結(jié)束語句。

縮進(jìn)要一致。避免在塊縮進(jìn)中混合制表符和空格。

使用簡潔的for循環(huán),而不是while or range.相比,for循環(huán)更易寫,運(yùn)行起來也更快

要注意賦值語句中的可變對(duì)象。

不要期待在原處修改的函數(shù)會(huì)返回結(jié)果,比如list.append()

一定要之用括號(hào)調(diào)用函數(shù)

不要在導(dǎo)入和重載中使用擴(kuò)展名或路徑。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37377.html

相關(guān)文章

  • [基礎(chǔ)學(xué)python]私有和專有

    摘要:私有函數(shù)在某些時(shí)候,會(huì)看到有一種方法命名比較特別,是以雙劃線開頭的,將這類命名的函數(shù)方法稱之為私有函數(shù)。如果一個(gè)函數(shù)類方法或?qū)傩缘拿忠詢蓚€(gè)下劃線開始但不是結(jié)束它是私有的其它所有的都是公有的。比如前面反復(fù)提到的就是一個(gè)典型的專有方法。 在任何語言中,都會(huì)規(guī)定某些對(duì)象(屬性、方法、函數(shù)、類等)只能夠在某個(gè)范圍內(nèi)訪問,出了這個(gè)范圍就不能訪問了。這是公、私之分。此外,還會(huì)專門為某些特殊的東西...

    tinysun1234 評(píng)論0 收藏0
  • [基礎(chǔ)學(xué)Python]正規(guī)地說一句話

    摘要:語句,遍列列表字符串字典集合等迭代器,依次處理迭代器中的每個(gè)元素。與配合使用處理在程序運(yùn)行中出現(xiàn)的異常情況。表示此行為空,不運(yùn)行任何操作。在迭代器函數(shù)內(nèi)使用,用于返回一個(gè)元素。恭請(qǐng)到上瀏覽及時(shí)更新的教程零基礎(chǔ)學(xué) 小孩子剛剛開始學(xué)說話的時(shí)候,常常是一個(gè)字一個(gè)字地開始學(xué),比如學(xué)說餃子,對(duì)他/她來講,似乎有點(diǎn)難度,大人也聰明,于是就簡化了,用餃餃來代替,其實(shí)就是讓孩子學(xué)會(huì)一個(gè)字就能表達(dá)。當(dāng)然...

    Freeman 評(píng)論0 收藏0
  • [基礎(chǔ)學(xué)python]類的細(xì)節(jié)

    摘要:在對(duì)象接口后包裝其實(shí)現(xiàn)的細(xì)節(jié),從而隔離了代碼的修改對(duì)用戶產(chǎn)生的影響。類提供了一個(gè)新的本地作用域,最小化了變量名沖突。類其實(shí)并沒有結(jié)束,不過本講座到此對(duì)類暫告一段。 前面對(duì)類的有關(guān)內(nèi)容已經(jīng)描述不少了,其實(shí)話題遠(yuǎn)遠(yuǎn)沒有結(jié)束,不過對(duì)于初學(xué)者,掌握這些已經(jīng)算是入門,在以后的實(shí)踐中,還需要進(jìn)行體會(huì)和感悟。 這幾天和幾個(gè)朋友以各種途徑討論過OOP的相關(guān)問題,他們是:令狐蟲、Frank、晉劍、小馮...

    Fundebug 評(píng)論0 收藏0
  • [基礎(chǔ)學(xué)python]總結(jié)參數(shù)的傳遞

    摘要:下面總結(jié)通過總結(jié)常見的函數(shù)參數(shù)定義方式,來理解參數(shù)傳遞的流程。這種方式最常見了,列出有限個(gè)數(shù)的參數(shù),并且彼此之間用逗號(hào)隔開。而且,必須數(shù)量一致,一一對(duì)應(yīng)。 就前面所講,函數(shù)的基本內(nèi)容已經(jīng)完畢。但是,函數(shù)還有很多值得不斷玩味的細(xì)節(jié)。這里進(jìn)行闡述。 參數(shù)的傳遞 python中函數(shù)的參數(shù)通過賦值的方式來傳遞引用對(duì)象。下面總結(jié)通過總結(jié)常見的函數(shù)參數(shù)定義方式,來理解參數(shù)傳遞的流程。 def...

    vibiu 評(píng)論0 收藏0
  • [基礎(chǔ)學(xué)Python]再深點(diǎn),更懂list

    摘要:有的前面有空格,有的后面有空格去掉元素前后的空格這是一個(gè)有意思的內(nèi)置函數(shù),本來我們可以通過的方式得到一個(gè)的每個(gè)元素編號(hào),然后在用的方式得到該元素。 對(duì)于list,由于她的確非常非常龐雜,在python中應(yīng)用非常廣泛,所以,雖然已經(jīng)介紹完畢了基礎(chǔ)內(nèi)容,這里還要用一講深入一點(diǎn)點(diǎn),往往越深入越... list解析 先看下面的例子,這個(gè)例子是想得到1到9的每個(gè)整數(shù)的平方,并且將結(jié)果放在li...

    mdluo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<