python函數2(返回值、傳遞列表...)
1、返回值
1.1、返回簡單的值
1 #返回簡單值 2 def get_formatted_name(first_name,last_name): 3 """返回整潔的名字""" 4 full_name = first_name + ' ' + last_name 5 return full_name.title() #將首字母大寫 6 7 musician = get_formatted_name('jim','harry') 8 print(musician)
執行結果:
Jim Harry
1.2、實參可選
什么叫參數可選,就是在調用函數時,如果形參中定義的值在函數調用時並不存在,那么怎么要實參可選呢?就是把形參定義一個默認值,這個默認值為空即可。
1 #實參可選 2 def get_formatted_name(first_name,last_name,middle_name = ''): 3 """返回整潔的名字""" 4 if middle_name: 5 full_name = first_name + ' ' + middle_name + ' '+ last_name 6 else: 7 full_name = first_name + " " + last_name 8 return full_name.title() 9 10 musician = get_formatted_name('jim','harry') 11 print(musician) 12 musician = get_formatted_name('jim','harry','coo') 13 print(musician)
執行結果:
Jim Harry
Jim Py Harry
1.3、返回字典
函數可以返回任意值,包括列表、字典等復雜的數據結構
1 #返回字典 2 def get_formatted_name(first_name,last_name): 3 """返回整潔的名字""" 4 full_name = {'first':first_name,'last':last_name} 5 return full_name 6 7 musician = get_formatted_name('jim','harry') 8 print(musician)
執行結果:
1 {'last': 'harry', 'first': 'jim'}
還可以增加年紀等信息
1 #拓展,增加年紀等信息 2 def get_formatted_name(first_name,last_name,age = ''): 3 """返回整潔的名字""" 4 person = {'first':first_name,'last':last_name} 5 if age: 6 person['age'] = age 7 return person 8 musician = get_formatted_name('jim','harry',age = '27') 9 print(musician)
執行結果:
1 {'age': '27', 'last': 'harry', 'first': 'jim'}
1.4、結合使用函數和while循環
函數可以結合之前學過的while循環進行使用,讓人機交互成為可能。
#結合使用函數和while循環 def get_formatted_name(first_name,last_name): """返回整潔的名字""" full_name = first_name + ' ' + last_name return full_name while True: print("\nPlease inter your name?") print("inter q to quit!") f_name = input('First name :') if f_name == 'q': break l_name = input('Last name:') if l_name == 'q': break musician = get_formatted_name(f_name,l_name) print(musician)
2、傳遞列表(修改列表、禁止函數修改列表)
使用背景:向函數傳遞列表很有用,這種列表包含的可能是名字、數字或者更復雜的對象(如字典),將列表傳遞給函數后,函數就可以直接訪問其內容。
示例:
將打印出對每個人的問候語。
1 #傳遞列表 2 def greet_users(names): 3 """向列表中的每位用戶都發出簡單的問候""" 4 for name in names: 5 msg = 'Hello,' + name.title() + "!" 6 print(msg) 7 8 usernames = ['harry','kobe','james'] 9 greet_users(usernames)
執行結果:
1 Hello,Harry! 2 Hello,Kobe! 3 Hello,James!
2.1、在函數中修改列表
將列表傳遞給函數后,函數可對其進行修改,在函數中對這個列表所做的任何修改都是永久性的。
1 #禁止函數修改列表 2 def print_models(unprinted_desgins,completed_models): 3 """ 4 模擬打印每個設計,直到沒有未打印的設計為止 5 打印每個設計后,都將其移到列表completed_models中 6 """ 7 while unprinted_desgins: 8 current_design = unprinted_desgins.pop() 9 10 #模擬根據設計制作3D打印模型的過程 11 print('Printing model:' + current_design) 12 completed_models.append(current_design) 13 14 def show_completed_models(completed_models): 15 """顯式打印好的所有模型""" 16 print("\nThe following models have been printed:") 17 for completed_model in completed_models: 18 print(completed_model) 19 20 unprinted_designs = ['iphone case','robot pendant','dodecahedron'] 21 completed_models = [] 22 23 print_models(unprinted_designs,completed_models) 24 show_completed_models(completed_models)
執行結果:
1 Printing model:dodecahedron 2 Printing model:robot pendant 3 Printing model:iphone case 4 5 The following models have been printed: 6 dodecahedron 7 robot pendant 8 iphone case
2.2、禁止函數修改列表
#禁止函數修改列表 print_models(unprinted_designs[:],completed_models)
執行結果:
Printing model:dodecahedron
Printing model:robot pendant
Printing model:iphone case
3、傳遞任意數量的實參
使用背景:不知道函數需要接受多少個實參,函數無法處理超出預定形參的實參數量,那么可以只用一個形參 *toppings;
這樣不管提供了多個實參,都可以收入。
示例:
1 #傳遞任意數量的實參 2 def user_name(*toppings): 3 print(toppings) 4 5 user_name('Harry','james','kobe')
執行結果:
('Harry', 'james', 'kobe')
以上,將執行結果封裝在一個元祖中。
也可以對輸入的實參進行遍歷操作:
1 def user_name(*toppings): 2 print("\n點名情況如下:") 3 for topping in toppings: #進行遍歷操作 4 print(topping) 5 6 user_name('Harry','james','kobe')
執行結果:
1 點名情況如下: 2 Harry 3 james 4 kobe
3.1、結合使用位置實參和任意數量實參
可以在函數名增加一些班級、性別等形參,這樣就會使用位置實參
1 #結合使用位置實參和任意數量實參 2 3 def user_name(classes,*toppings): 4 print(classes + "點名情況如下:") 5 for topping in toppings: 6 print(topping) 7 8 user_name("高3(1)班",'Harry','james','kobe')
執行結果:
高3(1)班點名情況如下:
Harry
james
kobe
