Python中函式的詳解
Python中的函式作用跟其他語言的函式作用基本相同,都是帶名字的程式碼塊,用於一些完成具體的工作。
要執行函式定義的特殊任務,可呼叫該函式。需要在程式中,多次執行同一項任務的函式,無需反覆編寫完成該任務的程式碼,而只需要呼叫執行該任務的函式即可。
首先:定義一個簡單的無參函式
def func():
'''列印簡單的問候語'''
print("Hello")
func()
定義一個有引數的函式 (注意:有參函式需要傳入資訊)
def func(name):
print("Hello "+name.title()+"!")
func('darren573')
形參(形式引數)和實參(實際引數)
形參:是定義函式名和函式體的時候使用的引數,目的是用來接收呼叫該函式時傳遞的引數。
實參:是在呼叫時傳遞給函式的引數,即傳遞給被呼叫函式的值。
接下來,我們舉栗子,用來傳遞實參;
def my_animal(type,name):
'''顯示動物資訊'''
print("\nI have a "+type+".")
print("My "+ type+"`s name is "+ name+".")
my_animal("dog","皮皮")
輸出結果為:I have a dog. My dog`s name is 皮皮.
這裡我們傳入的“dog”和“皮皮”就是實參。另外,傳遞引數從左到右,定義預設引數由右到左。
預設值 編寫函式時可給每個引數指定預設值,如果在函式呼叫中,傳入了新的實參,則替換掉預設值,如果沒有新的實參傳入,則使用預設值執行函式。、
def my_animal(name,type='dog'):
'''顯示動物資訊'''
print("\nI have a "+type+".")
print("My "+ type+"`s name is "+ name+".")
my_animal("皮皮")
my_animal("dog","皮皮")
以上兩種寫法都是可以的,需要注意的是:帶有預設值的形參通常寫在最右邊
等效的函式呼叫
以my_animal()方法為例,在傳入實參時我們可以換種方式,如下:
my_animal(name='皮皮',type='dog')
my_animal(type='dog',name='皮皮')
這些函式呼叫的輸出與前面的示例相同。
返回值 函式並非總是直接顯示輸出,相反,他還可以處理一些資料,並返回一個或一組值。這就是返回值。
我們通過下面函式來進行詳細認識:
def get_formatted_name(first_name,last_name):
'''返回整潔的名字'''
full_name = first_name+'.'+last_name
return full_name.title()
name = get_formatted_name('darren','Hendrix')
print(name)
返回結果為:Darren.Hendrix
讓實參變成可選的
有時候,需要把實參變成可選的,這樣使用函式的人就只需在必要的時候提供額外資訊,那麼如何把實參變成可選的呢?以上述方法為例
def get_formatted_name(first_name,last_name,middle_name=''):
'''返回整潔的名字'''
if middle_name:
full_name = first_name+''+middle_name+''+last_name
else:
full_name = first_name+''+last_name
return full_name.title()
s1 = get_formatted_name('da', '573', 'rren')
print(s1)
s2 = get_formatted_name('darren','573')
print(s2)
以上兩種方式的輸出都是一樣的,但是s1我們給了三個引數,s2我們只給了兩個引數,由此可見,這就是引數的可選擇行。
返回字典
函式可以返回任何型別的值,包括列表和字典等比較複雜的資料結構。咱們還是通過示例來進行研究
def build_person_name(first_name, last_name):
person = {'first': first_name, 'last': last_name}
return person
name = build_person_name('darren','573')
print(name)
輸出結果:{'first': 'darren', 'last': '573'}
可以很明確的看到,name的形式是以字典的方式輸出的
函式中的引數問題
本段將通過一個方法和多個傳參形式詳細講解函式中引數的問題,廢話少說,上程式碼。
def machine(x,y,*args):
print(x)
print(y)
print(agrs)
machine(1,2)
machine(1,2,3)
結果:1 2 ()
1 2 (3,)
顯而易見,這裡的*args表示後面跟的是一個元組,此外,*args還能處理多餘的實參
那我們再換一種方式進行研究
def machine2(x,*y,**z):
print(x)
print(y)
print(z)
machine2(1,2,3,4)
結果:1 (2,3,4,) {}
這個第三個**z打印出來的是{},即字典,x位列印的是1,而*y位就是以元組的方式進行傳入了,所以列印了(2,3,4)。
可是如果想對**z賦值該怎麼辦呢?,這裡就要考慮到字典的儲存方式了,我們都知道,字典是以key:value的鍵-值對方式進行儲存的,所以對z賦值我們可以這樣寫,如下
machine2(1,2,3,4,z=5,s=6)
看一下結果:1 (2,3,4) {'z':5,'s':6}
符合我們的預期,由此我們可以說*後面跟的是列表,**後面跟的是字典。
使用函式和while結合
本段將把函式和while迴圈結合起來,看程式碼
'''以輸出名字為例'''
def get_formatted_name(first_name, last_name):
full_name = first_name + '' + last_name
return full_name
'''結合使用函式和While迴圈'''
while True:
print('\nPlease tell me your name: ')
print("(enter 'q' at any time to quit)")
f_name = input("First name: ")
if f_name == 'q':
break '''跳出迴圈'''
l_name = input("Last name: ")
if l_name == 'q':
break
formatted_name = get_formatted_name(f_name, l_name)
print("\nHello, " + formatted_name + "!")
執行結果如下圖:
傳遞列表
在具體的專案中,有時候向函式傳遞列表是很必要的,這種列表可以包含,名字、數字、或者更復雜的物件(如字典)
def get_username(name):
for i in name :
message = "Hello,"+i.title()+"!"
print(message)
username = ['darren573','androidwing','idioticbear']
get_username(username)
結果如下:Hello,Darren573! Hello,Androidwing! Hello,Idioticbear!
首先我們聲明瞭一個列表,並賦值,然後傳給get_username()方法,在方法中通過for迴圈遍歷輸出元素,並問好。
本文到處就結束了,如發現有錯誤可留言,共勉!