一個大糟糕,突然發現排schedule的時候沒有排到要教function
怎麼用。但是這個東西又非常之方便,不講一下真的不行,所以只好來個第8.5天幫自己加班了。
昨天介紹了公司老鳥的工作秘訣-正規表達式,再加上今天介紹了怎麼用if跟loop當個有原則有效率的社畜,基本上大家已經具備讓python成為年度好員工的秘密了。雖然python裡面充滿各種各樣實用的套件跟函式,但是大家要做的事情都不一樣,一定沒辦法完全滿足每個人的需求。所以如果想讓python更上一層樓的話,絕對要學會訂好SOP讓他參考。而存放SOP的地方就是function
。
每間公司裡面一定會有針對不同活動或是事務的固定流程,會需要SOP就是因為這些事情不斷重複上演,前人找到有效率的工作方式了當然會傳給後面的人。當我們在進行資料前處理的時候也會遇到這樣的事情。以我們在if跟loop的應用裡面練習的針對成績給評語來說,一個學期至少三次段考,每次都要重複寫一樣的程式碼未免太過麻煩。這種時候就可以自己定一個function來簡化流程。
定function的方式很簡單,我們要先告訴python現在開始要定義一個新的SOP了,所以先打出def
。接著告訴python這個SOP的名字是什麼,跟到時候需要哪些要素(也就是參數)來進行。在做好這些前置工作後就可以開始告訴他SOP確切的內容了。先舉一個簡單的例子,如果我想要一個可以用半徑幫我算圓型面積的功能,就可以像下面這樣寫。
def circle_area(radius_int):
area = radius_int*radius_int*3.14
return area
翻譯一下上面這段程式碼就是「定義一個叫做circle_area
的函式,需要輸入代號radius_int
的一個參數。circle_area
執行的時候會把參數radius_int
平方之後再乘上3.14,並把這個結果宣告為一個叫做area
的變數。接著輸出這個變數。」這裡需要注意的有下面幾點:
return
來輸出下面就讓我們實際使用看看這個函式,也順便示範一下第四點到底在說什麼。
print(circle_area(5))
print(area)
# 輸出
78.5
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-ae1ac93c486b> in <module>
1 print(circle_area(5))
----> 2 print(area)
NameError: name 'area' is not defined
我們可以看到這個新函式成功幫我們算出半徑為5的圓型面積。然後area這個臨時變數對python來說是根本不存在的東西。
說明完定義function的基本概念之後,我們就試著來寫一個可以自動產出評語的function吧。這邊的情景設定是,通常成績會寫成一個表格(dataframe),我們要針對不同成績的同學給出評語並回傳一個有評語欄的表格給使用者。給評語的規則是這樣的:
def give_comment(df, column):
result = df
result["comment"] = " "
for i in range(len(df.iloc[:,column])):
if df.iat[i, column] >= 90:
result["comment"][i] = "為學霸鼓掌~"
elif df.iat[i, column] > 60:
result["comment"][i] = "重修囉~"
else:
result["comment"][i] = "恭喜過關~"
return result
如果想要給評語的話,首先我們需要有一個dataframe,然後還要知道哪一行代表的是成績才能作業。所以需要的參數有兩個,表格跟成績是第幾行。接著先準備新的表格讓他有代表comment的行可以填入,再讓他一個一個判斷符合哪個評語的條件把評語傳進表格裡,最後回傳這個新表格。
接著我們用這個檔案試試看。
import pandas as panda
data = pd.read_csv("檔案路徑")
new_data = give_comment(data, 1)
new_data.head()
那關於函式定義的教學就到這邊結束,真的明天(今天)見~