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...