python教程从入门到实践第八章_python:从入门到实践--第八章:函数
定義:函數是帶名字的代碼塊,用于完成具體的工作
定義函數:
def greet_user():#關鍵字def來告訴python你要定義一個函數,這是函數定義,以冒號結尾,括號必不可少,因為可能在括號內指出函數為完成其任務,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?需要什 么樣的信息
"""顯示簡單的問候語"""? #描述函數是做什么的,被稱為文檔字符串的注釋
print("Hellow!")? ? ?#是函數體內唯一的一行代碼,表示函數只做一項工作,打印hellow!
greet_user()? ? ? ? ? ? ? ?#表示調用這個函數
向函數傳遞信息:
def greet_user(username): #通過在這里添加username,調用它時給username指定一個值
print("Hellow!"+username)
greet_user("jesse")
形參和實參:
def greet_user(username) #這里username是形參----函數完成其工作所需的一項信息
greet_user("jesse")? ? ? ? ? ? ? ? ? ? #"jesse"是實參----是調用函數時傳遞給函數的信息
傳遞實參:鑒于函數定義中可能包含多個形參,因此函數調用中也可能包含多個實參
傳遞實參的方式:
1.位置實參:要求實參順序與形參的順序相同
2.關鍵字實參:其中每個實參都由變量名和值組成;還可以使用列表和字典,關鍵字實參的順序無關緊要
默認值:編寫函數時,可給每個形參指定默認值,在調用函數中給形參提供了實參時,python將使用指定的實參值;否則,將使用形參的默認值。因此,給形參指定默認值后,可在函數調用中省略相應的實參
***使用默認值時,在形參列表中必須先列出沒有默認值的形參,再列出有默認值的形參。這樣python依然能夠正確地解讀位置實參
***可混合使用位置實參、關鍵字實參和默認值
返回值-----重點
函數并非總是直接顯示輸出,相反,它可以處理一些數據,并返回一個或一組值。函數返回的值被稱為返回值
可使用return語句將值返回到調用函數的代碼行
***如果需要用到函數的處理結果(調用結果)那么就寫return,不需要的話,就不用寫
def get_formatted_name(first_name,last_name):? #函數get_formatted_name()的定義通過形參接受名和姓
full_name=first_name+' '+last_name? ? ? ? ? ? ? ?#并將結果存儲在變量full_name中
return full_name? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #將結果返回到函數調用行
musician=def get_formatted_name('jimi','hendrix')? #調用返回值的函數時,需要提供一個變量,用于存儲返回的值
print(musician)
讓實參變成可選的:給形參指定一個默認值---空字符串
def get_formatted_name(first_name,last_name,middle_name=' '):可以給形參middle_name指定一個默認值---空字符串,并將其移到形參列表的末尾
返回字典:
函數可返回任何類型的值,包括列表和字典等較復雜的數據結構
def build_persom(first_name,last_name):
person={'first':first_name,'last':last_name}
return person
musician=build_persom('wang','xiang')
print(musician)
結合使用函數和while循環:
def get_formatted_name(first_name,last_name):
full_name=first_name+' '+last_name
return full_name
while True:
print("請輸入你的名和姓")
print("退出,請輸入q")
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(formatted_name)
8.4傳遞列表:向函數傳遞列表
def greet_users(names):
for name in names:
msg="hellow,"+name
print(msg)
username=['jack','bob','ken']
greet_users(username)
---在函數中修改列表:將列表傳遞給函數后,函數就可對其進行修改。在函數中對這個列表所做的任何修改都是永久性的
#每個函數都應只負責一項具體的工作
def print_models(unprinted_designs,completed_models):
# 模擬打印每個設計,直到沒有未打印的設計為止
# 打印每個設計后,都將其移到completed_models中
while unprinted_designs:
current_designs = unprinted_designs.pop()
# 模擬打印過程
print("開始打印:"+current_designs)
completed_models.append(current_designs)
def show_completed_models(completed_models):
# 顯示打印好的所有模型
print("已打印好的")
for completed_model in completed_models:
print(completed_model)
unprinted_designs=['iphone case','robot pendant','dodecahedron']
completed_models=[]
print_models(unprinted_designs,completed_models)
show_completed_models(completed_models)
8.5傳遞任意數量的實參--有時,預先不知道函數需要接受多少個實參,python允許函數從調用語句中收集任意數量的實參
def make_pizza(*toppings):
print(toppings)
make_pizza('pepperonil')
make_pizza('pepperonil','green','extra cheese')
#形參名*toppings中的星號讓python創建一個名為toppings的空元組,并將收到的所有值都封裝到這個元組中。即便函數收到一個值也如此
8.5.1結合使用位置實參和任意數量實參
--如果要讓函數接受不同類型的實參,必須在函數定義中將接納任意數量實參的形參放在最后
def make_pizza(size,*toppings):
print(“\nMaking a”+str(size)+"-inch pizza with the following toppings:")
for topping in toppings:
print(topping)
make_pizza(16,'pepperonil')
make_pizza(12,'pepperonil','green','extra cheese')
8.5.2 使用任意數量的關鍵字實參
--有時候,需要接受任意數量的實參,但預先不知道傳遞給函數的會是什么樣的信息。在這種情況下,可將函數編寫成能夠接受任意數量的鍵-值對-----調用語句提供了多少就接受多少
def make_car(manufacturer, model, **options):#兩個星號讓python創建一個空字典
"""Make a dictionary representing a car."""
car_dict = {
'manufacturer': manufacturer.title(),
'model': model.title(),
}
for option, value in options.items():
car_dict[option] = value
return car_dict
my_outback = make_car('subaru', 'outback', color='blue', tow_package=True)
print(my_outback)
my_accord?=?make_car('honda',?'accord',?year=1991,?color='white',headlights='popup')
print(my_accord)
-
總結
以上是生活随笔為你收集整理的python教程从入门到实践第八章_python:从入门到实践--第八章:函数的全部內容,希望文章能夠幫你解決所遇到的問題。