Python學習之函式

2021-06-20 06:01:23 字數 3276 閱讀 9249

0) 引論

函式是實現**復用的主要途徑之一,而且函式的使用也可以使得程式更加容易理解,更加規範化。程式很多時候並不是給計算機的,而是給人看的。這裡總結一下python中的函式的應用

1) 函式

首先python中的函式的格式是怎樣的。

def 函式名(形參):

函式體

下面是乙個計算fibonacci數列的函式的定義:

def fibs(num):

result=[0,1]

for i in range(num-2):

return result

在函式中也可以加入一些說明文字,這裡可以不需要利用『#』注釋,而直接在函式中加上字串表示說明。

def fibs(num):

'calculate fibonacci numbers'

result=[0,1]

for i in range(num-2):

return result

如果需要檢視字串說明,則可以用下面的命令

函式名.__doc__(注意是雙下劃線)

>>> fibs.__doc__

'calculate fibonacci numbers'

2) 函式的形參與實參

形參和實參是什麼意思就不介紹了,沒多大意思,主要是看幾個例子。

>>> def try_to_change(n):

n='arsharm'

>>> m = 'bob'

>>> try_to_change(m)

>>> m

'bob'

這裡我們可以看到n是形參,m是實參,當把m送入到函式中時,並不能改變實參的值。這是因為在這個過程中,它們有個作用域的改變,當將m送入到函式中時,相當於在乙個新的作用域內重新建立了乙個m。不同作用域中的相同的變數並不是乙個變數,只不過它們的名字是一樣的罷了。

那麼如果我們一定要改變實參m的值呢? 這裡可以用列表。相應的函式也要做一些改變

>>> def try_to_change(n):

n[0]='arsharm'

>>> m=['bob']

>>> try_to_change(m)

>>> m

['arsharm']

可以看到把變數換成列表的形式就可以了。這個和c語言中的規則是一樣的。變數和c語言中的變數的規則一樣,列表對應著c語言中的陣列和指標。

3) 不確定數目引數的處理

函式中引數的變化還是很多的,例如我們可以給函式提供一些預設的引數

>>> def hello(greeting='hello',name='world'):

print(greeting+' '+name+'!')

>>> hello()

hello world!

>>> hello('hey','judd')

hey judd!

>>> hello(greeting='hey')

hey world!

可以看出利用上面的方式提供引數,有若干個好處,一是能夠提示引數的順序以及使引數的意義更加明晰,二是可以在不輸入引數的情況下,輸出乙個預設的引數,不至於出錯。三是可以輸入部分引數,預設部分引數,提高效率。

4) 『*』和『**』符號的作用

『*』可以把所有的引數放到乙個元組裡

>>> def print_para(*para):

print(para)

>>> print_para(1,2,3)

(1, 2, 3)

>>> print_para('hello')

('hello',)

「**」可以把所有的引數放到乙個字典裡

>>> def print_para(**para):

print(para)

>>> print_para(x=1,y=2,z=3)

既然是字典,那麼必然要有鍵和值,如上所示。

「*」與「**」這兩個符號可以用在不知道有幾個引數的情況下,這種情況很常見。

>>> def print_para(*param,**para):

print(para)

print(param)

>>> print_para(1,2,3,x=1,y=4)

(1, 2, 3)

同時「*」與「**」這兩個符號還可以反轉使用,即把元組和字典轉換回來變為值

>>> para = (1,2)

>>> add(*para)

3

>>> para = 

>>> def add(x=1,y=2):

return x+y

>>> add(**para)

5

5) 全域性變數

全域性變數比較簡單,在變數前面加上global就可以了。但是一般還是不要用了吧,容易出錯,而且關鍵是還不容易找到錯誤在**。

>>> m=15

>>> def try_to_change():

global m

m -= 3

>>> m

15>>> try_to_change()

>>> m

12

6) 寫乙個二分查詢的函式程式

sequence=[3,2,5,8,10,9,79]

def bin_search(sequence,number,upper,lower):

sequence.sort()

middle = (upper+lower)//2

if sequence[middle]==number:

print('find it!')

elif upper-lower==0:

print('not find!')

elif sequence[middle]number:

bin_search(sequence,number,middle,lower)

bin_search(sequence,11,7,0)

python學習之函式

抽象 斐波那契數列 fibs 0,1 for i in range 10 print fibs fibs 0,1 i 2 while i 20 i 1 print fibs 使用callable判斷函式是否可以呼叫 import math x 1 y math.sqrt print callable...

python學習之函式

一 函式 注 當乙個函式名字由兩個單詞組成的時候 第二個單詞的首字母大寫 統一 當我們定義乙個函式的時候 用def語句 def 函式名 引數列表,可以沒有引數 比如 i 1j 2 def add a,b return a b print add i,j 二 關於函式形預設引數 注 假如函式是有形參的...

Python學習 之 函式

概念高階用法 語法 關鍵字 函式名 引數列表 函式體引數順序 位置引數 a,b,c 未知數量位置引數,args,接收進函式內的型別為 tuple 關鍵字引數 key none 未知關鍵字引數,kwargs,接收進函式內的型別為 dict 順序 位置引數 args 關鍵字引數 kwargs deffu...