97干视频,99国产精品懂色,亚洲精品99久久久久中文字幕,伊人五月丁香综合AⅤ,国产精品成人免费999

當前位置: 移動互聯(lián)網(wǎng)學院 > python人工智能 > python入門 > Python學習筆記之函數(shù)
Python學習筆記之函數(shù) 時間:2018-01-09     來源:Python學習筆記匯總

最近小編也在學習Python,小編覺得Python學習中函數(shù)這部分是很重要的,今天小編為大家介紹一下如何將語句組織成函數(shù),通俗的來講這樣可以進一步告訴計算機如何做事?接下來看看Python函數(shù)有哪些內(nèi)容吧?

下面編寫一小段代碼計算婓波那契數(shù)列(前兩個數(shù)的和是第三個數(shù))

fibs = [0,1] # 定義一個列表,初始內(nèi)容是0,1

for i in range(8): #循環(huán)8次

fibs.append(fibs[-2]+fibs[-1]) #append在末尾追加一個數(shù),這個是它前面兩個數(shù)的和

#輸入

>>> fibs

#輸出

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

因為賦完值fibs已經(jīng)有兩個數(shù)了(0,1),所以循環(huán)8次之后,列表有10個數(shù),兩個數(shù)相加等于第3個數(shù)。

是不是覺得應該由我們輸入來控制打印多少個數(shù)?只用把程序小變一下就行了。

fibs = [0,1]

num = input('How many fibonacci numbers do you want?')

for i in range(num-2):

fibs.append(fibs[-2]+fibs[-1])

print fibs

#輸入

>>>

How many fibonacci numbers do you want?12

#輸出

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

抽象

抽象有可以節(jié)省很多工作,它使得計算機程序可以讓人讀懂的關(guān)鍵。計算機喜歡處理精確和具體的指令,但人不同,我們更喜歡丟進去一個東西,計算機就能反饋給我們想要的結(jié)果,而不是由我們一步一步的告訴它怎么做。因此,上面的代碼抽象一點,應該是這樣的:

num = input('How many fibonacci numbers do you want?')

print fibs

那計算機怎么知道要怎么做?我們可以把處理的過程封裝成函數(shù),在我們每次用到時只用調(diào)用這個函數(shù)就可以了。

創(chuàng)建函數(shù)

函數(shù)是可以調(diào)用的,它執(zhí)行某種行為并且返回一個值。內(nèi)建的callable函數(shù)可以用來判斷函數(shù)是否可調(diào)用:

>>> import math

>>> x = 1

>>> y = math.sqrt

>>> callable(x)

False

>>> callable(y)

True

備注:callable 在python3.0中不再可用。

那如何定義一個函數(shù)呢?使用def語句即可:

>>> def hello(name):

return 'hello.'+name+'!'

#我們定義了一個hello函數(shù),它會將輸入的內(nèi)容前面加“hello.”后面加“!”,并返回給用

#戶

>>> print hello('world')

hello.world!

>>> print hello('zhangsan')

hello.zhangsan!

不錯吧!再回過頭去想想怎樣把返回婓波那契數(shù)列定義成一個函數(shù)。如下:

#定義fibs函數(shù),用于婓波那契數(shù)列

>>> def fibs(num):

result = [0,1]

for i in range(num-2):

result.append(result[-2]+result[-1])

return result

#直接調(diào)用fibs函數(shù)

>>> fibs(10)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

>>> fibs(15)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]

局部變量

當函數(shù)定義生命變量的時候,函數(shù)內(nèi)所生命的變理只在其函數(shù)內(nèi)有效,與函數(shù)外具有相同名稱的其他變量沒有任何關(guān)系

#局部變量

def func(x):

print 'x is',x

x =2 # x=2只在func函數(shù)內(nèi)其作用

print 'Changed local x to',x

x = 50

func(x) #func函數(shù)并沒有返回數(shù)據(jù)過來。

print 'x is still',x

#輸出

>>>

x is 50

Changed local x to 2

x is still 50

global 語句

如果想把一個變量聲名為 全局的,則可以使用global語句。

def func():

global x

print 'x is',x

x = 2

print 'Changed local x to',x

x =50

func()

print 'Value of x is ',x

#輸出

x is 50

Changed local x to 2

Value of x is 2

global 語句被用來生命x 是全局,因此在執(zhí)行完func函數(shù)后,x的值已經(jīng)發(fā)生了改變,并且作用于整個程序,因此最后的輸入結(jié)果為2

默認參數(shù)

對于一些參數(shù),我們希望它的一些參數(shù)是可選的,如果用戶不想要為這些參數(shù)提供值的話,這些參數(shù)就使用默認值。

def say(message,times=1):

print message*times

say('Hello')

say('World',5)

#輸出

>>>

Hello

WorldWorldWorldWorldWorld

定義的say函數(shù)的第兩個參數(shù)就是可選的,默認為times=1;也就是將兩個參數(shù)相乘輸出。

注意:只有在形參表末尾的那些參數(shù)可以有默認參數(shù),如def func(a=5,b) 是無效的。

關(guān)鍵參數(shù)

如果某個函數(shù)有許多參數(shù),而我們只想指定其中的一部分,那么可以使用名字(關(guān)鍵字)而不是位置來給函數(shù)指定實參。----這被稱作 關(guān)鍵參數(shù)

def func(a,b=5,c=10):

print 'a is',a, 'and b is',b,'and c is',c

func(3,7)

func(24,c=32)

func(c=23,a=14)

#輸出

>>>

a is 3 and b is 7 and c is 10

a is 24 and b is 5 and c is 32

a is 14 and b is 5 and c is 23

這樣做,我就不必擔心參數(shù)的順序,使用函數(shù)變得更加簡單。假設其它函數(shù)都有默認值,我們可以只給自己想要的參數(shù)賦值。

遞歸:

有用的遞歸函數(shù)... 等等,什么是無用的遞歸?先來看一個函數(shù)的定義:

def recursion()

return recursion()

顯然,它什么也干不了,程序的執(zhí)行不斷申請內(nèi)存,直接內(nèi)存耗盡,程序崩潰。

接著,有用的遞歸函數(shù)包含以下幾個部分:

當函數(shù)直接返回值時有基本實例(最小可能性問題)

遞歸實例,包括一個或者多個問題最小部分的遞歸調(diào)用。

下面通過遞歸函數(shù)來計算一個n的階,n*(n-1)*(n-2)*....*1

def f(n):

if n == 1:

return 1

else:

return n*f(n-1)