1. 程式人生 > >萌新向Python數據分析及數據挖掘 第一章 Python基礎 第八節 函數

萌新向Python數據分析及數據挖掘 第一章 Python基礎 第八節 函數

首字母 python基礎 操作 span location ber mage val 返回值

第一章 Python基礎

第八節 函數

定義函數

函數 其實就可以理解為外掛,把一些常用的、重復率比較多你又不想重復寫的東西寫進函數,加上開關實現簡化操作

舉個簡單的例子

技術分享圖片

技術分享圖片
1 def greet_user(username):
2     #定義一個叫做“迎接用戶”的外掛,讓他能直接打印一個問候語,括號裏面是函數需要輸入的東西,也就是個性化的東西
3     """先是簡單的問候語"""
4     print("Hello! " + username.title() + "!")# 打印hello!+ 用戶輸入的用戶名的首字母大寫形式
5 greet_user("mike") #mike使用外掛 一次
View Code



由上所示,關鍵字def定義一個函數,後面跟著函數名以及用來輸入參數的括號,定義以冒號結束,而print("Hello!")為其函數體。

調用函數時,則依次指定函數名以及用括號括起的必要信息,如參數等。

實參和形參

在函數greet_user(username)的定義中,變量username是一個形參。形參是一個函數完成其工作所需的一個參數。

在代碼greet_user("mike")中,值"mike"是一個實參。實參是調用函數時傳遞給函數的參數。

調用greet_user("mike")函數時,我們將實參"mike"傳遞給了函數greet_user(),這個值被存儲在形參username。

傳遞實參

位置實參:調用函數時,必須將函數調用中的每個實參都采用基於實參順序的方式關聯到函數定義中的一個形參中。

關鍵字實參:調用函數時,直接傳遞給函數名稱-值對。此時不用考慮實參順序。

技術分享圖片



默認值:給形參指定默認值。在調用函數中給形參提供了實參時,則用指定的實參值。如果沒有提供則使用形參默認值。

PS:使用默認值時,在形參列表中必須列出沒有默認值的形參,再列出有默認值的實參。才能讓python正確解讀位置實參。

技術分享圖片



返回值

返回簡單值

技術分享圖片



技術分享圖片

1 def get_formatted_name(first_name, last_name):#輸入姓和名
2     full_name = first_name + 
+ last_name# 拼接 3 return full_name.title()#返回拼接後的首字母大寫形式 4 musician = get_formatted_name(jimi, hendrix) 5 print(musician)
View Code

我們可以使用return語句在函數中返回值。

讓實參可選

技術分享圖片

技術分享圖片
 1 def get_formatted_name(first_name, last_name, middle_name=‘‘): 
 2     #當有參數可有可無的時候,可以給他一個默認值,如果用戶沒有輸入就用默認值
 3     if middle_name:#如果有輸入默認值,則三個拼接
 4         full_name = first_name +   + middle_name +   + last_name
 5     else: #如果沒有輸入默認值,則姓名拼接
 6         full_name = first_name +   + last_name
 7     return full_name.title()
 8 musician = get_formatted_name(jimi, hendrix)
 9 print(musician)
10 musician = get_formatted_name(john, hooker, lee)
11 print(musician)
View Code



如上所示,使用if條件語句,並將實參作為判斷條件即可讓實參可選。

傳遞列表

將列表傳遞給函數後,不僅可以遍歷列表,還能修改列表,並且這種修改時永久性的。 如果要禁止函數修改列表,可以傳遞列表的副本,比如:function_name(list_name[:])

傳遞任意數量的實參

技術分享圖片 技術分享圖片
1 def make_pizza(*toppings):#用戶可以輸入多個pizza配料,但都是屬於披薩配料,一起作為一個元組被函數使用
2     print(toppings)
3 make_pizza(pepperoni)
4 make_pizza(mushrooms, green peppers, extra cheese)
View Code

形參名*toppings中的星號表示創建一個名為 toppings 的空元組,並把所有收到的值封裝在這個元組中。我們還可以使用循環語句將所有值打印出來。

結合使用位置實參和任意數量實參

如果要讓函數接受不同類型的實參,必須在函數定義中將接納任意數量的實參的形參放在最後。這樣,python會先匹配位置實參和關鍵字實參,並把余下的實參都收集到最後一個形參中。

技術分享圖片

 

技術分享圖片
1 def make_pizza(size, *toppings):#做披薩程序,輸入尺寸和配料(可多種)
2     print("\nMaking a " + str(size) + "-inch pizza with the following toppings:")
3     for topping in toppings: #把所有的配料打印出來
4         print("- " + topping)
5 make_pizza(16, pepperoni)
6 make_pizza(12, mushrooms, green peppers, extra cheese)
View Code



使用任意數量的關鍵字實參

技術分享圖片

技術分享圖片
 1 def build_profile(first, last, **user_info):#建檔程序,需要輸入姓、名、和用戶信息(字典)
 2     profile = {}#建立一個空字典
 3     profile[first_name] = first #用‘first_name‘標簽存放用戶輸入的名
 4     profile[last_name] = last#用‘last_name‘標簽存放用戶輸入的姓
 5     for key, value in user_info.items():
 6         #把用戶輸入的字典形式的用戶信息照抄,
 7         #這裏 如果用戶信息裏面有一個鍵值對和‘first_name‘或‘last_name‘一樣,
 8         #那麽,用戶資料裏的姓名將被替代,大家可以嘗試一下
 9         profile[key] = value
10     return profile
11  
12 user_profile_1 = build_profile(albert, einstein,location=princeton,field=physics)
13 user_profile_2 = build_profile(albert, einstein,first_name=princeton,field=physics)
14 print(user_profile_1)
15 print(user_profile_2)
View Code



形參**user_info中的兩個星號表示創建一個名為user_info的空字典,並將收到的所有名稱-值對都封裝到這個字典中。

將函數存儲在模塊中

導入整個模塊

模塊時擴展名為.py的文件,包含要導入到程序中的代碼。使用import語句可以將模塊導入。把文件放在同一個文件夾裏面最方便。

#pizza.py
技術分享圖片 技術分享圖片
1 def make_pizza(size, *toppings): #做披薩程序,輸入尺寸和配料(可多種)
2     print("\nMaking a " + str(size) +"-inch pizza with the following toppings:")
3     for topping in toppings:
4         print("- " + topping)
View Code



 
#making_pizzas.py
技術分享圖片

技術分享圖片
1 import pizza #導入pizza模塊(已經寫好的外掛)
2 pizza.make_pizza(16, pepperoni) #導入後直接使用
3 pizza.make_pizza(12,mushrooms, green peppers, extra cheese)
View Code



如果導入的是整個模塊,調用的時候就要指定模塊名:module_name.function_name()

導入特定的函數

導入模塊中特定的函數,可以使用:from module_name import function_name

用逗號分隔函數名,可導入任意數量函數:from module_name import function_0, function_1, function_2

這時候調用函數,無需使用句點,直接指定函數名,因為我們在import語句中顯示導入了函數。

使用as給函數指定別名

為了防止沖突,或者函數名太長,可指定一個獨一無二的別名,函數的另外一個名稱,通用語法為:from module_name import function_name as fn

導入模塊中的所有函數

使用星號(*)運算符可以導入模塊中的所有函數,此時不用使用句點來調用函數。不過最好不要這樣。語法為:from module_name import *

萌新向Python數據分析及數據挖掘 第一章 Python基礎 第八節 函數