定義函數 Python中定義函數的格式為: 函數在執行到return語句時結束,並將結果返回。如果沒有return語句,函數執行完畢後返回None。 例: 結果為: my age is 20 ps :str(x)函數我一開始並不知道具體功能是什麼,只是覺得應該要將int型轉換成string類型再輸出 ...
定義函數
Python中定義函數的格式為:
def fun([參數列表]):
...
函數在執行到return語句時結束,並將結果返回。如果沒有return語句,函數執行完畢後返回None。
例:
def myAge(x):
if x < 0:
print 'error:invalid number'
elif x > 120:
print 'error:too large number'
else:
print 'my age is ' + str(x)
myAge(20)
結果為:
my age is 20
ps:str(x)函數我一開始並不知道具體功能是什麼,只是覺得應該要將int型轉換成string類型再輸出,按了下s,就在代碼補全的列表裡看到了str函數,放上去後居然能正確運行...
出於好奇我去Google了下這個函數的功能,Google解釋如下:
The str() function is meant to return representations of values which are fairly human-readable...
大致意思是說,str函數是返回一個適合人類閱讀的值...
比如,輸入
s = 'hello,world'
str(s)
返回結果為:
'hello,world'
輸出的結果是用引號包含的,這個“適合人類閱讀”的值應該也是string類型的,難怪我加了str後就可以正常運行了!
pps:我又發現那段代碼可以改為:
print 'my age is ',x
返回多個值
Python支持多個值返回,如以下程式使物體從一個坐標移動到另一個坐標:
import math
def move(x,y,step,angle = 0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx,ny
x,y = move(100,100,60,math.pi*6)
print x,y
結果為:
160.0 100.0
事實上,這種“返回多個值”返回的是一個tuple類型:
m = move(100,100,60,math.pi*6)
print m
用這段代碼替換上面調用move函數的代碼,結果為:
(160.0, 100.00000000000004)
函數的參數
Python里函數的參數是非常靈活的,Python除了正常的必選參數外,還可以使用預設參數、可變參數、關鍵字參數,使得函數定義出來的藉口,不但能處理複雜的參數,還可以簡化調用者的代碼。
預設參數
以下是一個能計算任意次方的函數(預設計算二次方):
def power(x,n = 2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
這樣,當我們調用power(5)時,相當於調用power(5,2):
power(5) # power(5,2)
結果為:
25
預設參數和C++中構造函數預設參數列表相似。
可變參數
可變參數,顧名思義,就是傳入的參數的個數是可變的,可以是0個、1個、2個到任一個。
如:求a^2+b^2+c^2+...+n^2的值。
一般情況下,我們可以定義一個函數,再以一個tuple或list作為參數傳入:
def calcul(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
cal([1,2,3]) #參數為list
如果想要改成可變參數列表的形式,只需在參數前加上*號:
def calcul(*numbers)
sum = 0
for n in numbers:
sum = sum + n * n
return sum
cal(1,2,3) #參數個數是可變的,在調用時自動組裝為tuple
調用結果均為:
14
關鍵字參數
關鍵字參數允許我們傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict:
def person(name,age,**other):
print 'name:',name,' age:',age,' other:'other
該函數除了必選參數name,age外,還接受關鍵字參數other。在調用該函數時,可以只傳入必選參數:
person('Larry',21)
調用結果為:
name: Larry,age: 21,other: {}
又如,調用
person('Larry',21,Sch = 'HFUT',Dept = 'CS')
的結果為:
name: Larry,age: 21,other: {'Sch':'HFUT','Dept':'CS'}
關鍵字參數可以很好的擴展函數的功能,可以使我們更為方便的處理事務。
參數組合
在Python中,必選參數、預設參數、可變參數和關鍵字參數可以一起使用,但是必須要嚴格按照此順序,如:
def fun(a,b,c = 0,*argc,**kw):
print 'a = ',a,'b = ',b,'c = ',c,'argc = '.argc,'kw = ',kw
在調用函數的時候,Python解釋器按照參數的位置和名字把對應的參數傳進去:
func(1, 2)
a = 1 b = 2 c = 0 args = () kw = {}
func(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {}
func(1, 2, 3, 'a', 'b')
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
func(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}