เวลาเราเขียนโปรแกรม เราสามารถสั่งให้โปรแกรมทำงานกับข้อมูลด้วยคำสั่งต่างๆ อย่างที่เราได้เรียนรู้ไปในตอนที่แล้ว อย่างไรก็ตาม คำสั่งมาตรฐานอาจจะไม่เพียงพอต่อความต้องการของเรา ดังนั้นวิธีการที่จะช่วยได้คือ เราจะสร้างฟังก์ชันที่ทำงานได้ตรงใจเราขึ้นมาเอง
ลองคิดดูว่าใน Excel version เก่า ยังไม่มีฟังก์ชัน UNIQUE การจะตัดให้เหลือข้อมูลที่ไม่ซ้ำกันมันก็จะยุ่งยาก ต้องเขียนสูตรซ้อนกันหลายบรรทัด แต่พอมีคนสร้างฟังก์ชัน UNIQUE ให้ใช้ใน Excel365 หรือ Excel Online ปุ๊ป ชีวิตก็จะง่ายขึ้นทันที อารมณ์ของการมีฟังก์ชันเจ๋งๆ มันก็คล้ายๆ แบบนี้แหละครับ
การที่มีฟังก์ชันที่ทำงานได้ดั่งใจ ช่วยให้เราสามารถทำงานได้ง่ายขึ้นมากๆ ดังนั้นบทความนี้เราจะมาสร้างฟังก์ชันใช้เองกันครับ
สารบัญ
Function คืออะไร?
ฟังก์ชันคือชุดคำสั่งที่จะทำงานเมื่อเราสั่งมัน โดยที่เราสามารถใส่ input เข้าไปใน Function แล้วมันจะทำงานแล้วสามารถคืนค่าผลลัพธ์เป็น Output ออกมาได้ด้วย (หรือจะทำงานเฉยๆ ไม่คืนค่าก็ได้)
แน่นอนว่าคนที่ใช้ Excel มาอย่างพวกเราน่าจะคุ้นเคยกับฟังก์ชันเป็นอย่างดี ซึ่งใน Excel ก็มีฟังก์ชันให้ใช้หลากหลาย เช่น
- ฟังก์ชัน LEN (text) สามารถนับจำนวนอักขระใน text ได้ว่ามีกี่ตัว
- ฟังก์ชัน LEFT (text, [num_chars]) เอาไว้ดึงข้อความ text จากด้านซ้าย ตามจำนวนตัวอักษร num_chars ที่เราต้องการ
- ฟังก์ชัน EDATE (start_date, months) เอาไว้เลื่อนวันจาก start_date ไปตามจำนวนเดือน months ที่ระบุ
- ฟังก์ชัน NOW() เอาไว้แสดงวันที่และเวลาปัจจุบัน
ฟังก์ชันแต่ละอันต้องการจำนวน input ไม่เท่ากัน เช่น EDATE กับ LEFT ต้องการ 2 ตัว, LEN ต้องการ 1 ตัว, ส่วน NOW ไม่ต้องการเลย นอกจากนั้น input บางตัวก็เป็นค่า optional คือจะระบุหรือไม่ก็ได้ เช่น [num_chars] ใน LEFT ถ้าไม่ระบุแปลว่าเอา 1 ตัวเป็นต้น
ซึ่งใน Python เราก็สามารถสร้างฟังก์ชันที่ต้องการ input เข้าไปประมวลผลได้เหมือนกัน และทำให้ input เป็น optional หรือไม่ก็ได้ด้วย
วิธีการสร้างฟังก์ชันใน Python
เราสามารถสร้างฟังก์ชันได้ด้วยคำสั่งรูปแบบนี้ (ย่อหน้าข้างใน def สำคัญมาก เป็นตัวระบุว่าบรรทัดไหนคือส่วนของฟังก์ชัน)
def ชื่อฟังก์ชัน():
คำสั่งที่ต้องการให้ทำในฟังก์ชันนั้นๆ
โดยที่สามารถระบุ input ได้ด้วยแบบนี้
def ชื่อฟังก์ชัน(input1,input2):
คำสั่งที่ต้องการให้ทำในฟังก์ชันนั้นๆ
และสามารถกำหนดค่า default ของ input แต่ละตัวได้ด้วยการสั่งแบบนี้
def ชื่อฟังก์ชัน(input1=def1,input2):
คำสั่งที่ต้องการให้ทำในฟังก์ชันนั้นๆ
นอกจากนั้นยังสามารถให้มันคืนค่าผลลัพธ์ออกมาได้เช่นกัน ด้วยคำสั่ง return แบบนี้
def ชื่อฟังก์ชัน(input1=def1,input2):
คำสั่งที่ต้องการให้ทำในฟังก์ชันนั้นๆ
return ผลลัพธ์
และเราสามารถเรียกใช้ฟังก์ชันนั้นๆ ได้โดยเรียกชื่อฟังก์ชันตามด้วย input ในวงเล็บ ซึ่งเหมือนกับการเรียกใช้สูตร Excel เลย
มาดูตัวอย่างกันดีกว่าครับ
ตัวอย่างการเขียนฟังก์ชัน
Print ตามจำนวนครั้ง
เริ่มจากตัวอย่างพื้นฐาน คือให้ print คำที่ระบุ ตามจำนวนครั้งที่ต้องการ โดยถ้าไม่ระบุจำนวนครั้งจะให้ print ครั้งเดียว ซึ่งผมจะตั้งชื่อฟังก์ชันว่า printX (เท่มะ?) สามารถทำได้ดังนี้
def printX(text,num_time=1): #สร้างฟังก์ชัน printX
for i in range(num_time): #วน loop ตามจำนวนครั้งที่ระบุ
print(text)
printX("เทพมาก",3) #เรียกใช้ฟังก์ชัน printX ที่สร้างไว้
เลียนแบบ LEFT ใน Excel
ใน Python ไม่มีฟังก์ชัน LEFT เหมือน Excel แต่เราจะลองสร้างมันขึ้นมาใช้งานบ้าง ซึ่งทำได้ดังนี้
def LEFT(text,num_chars=1): #สร้างฟังก์ชัน LEFT
return text[:num_chars]
print(LEFT("ThepExcel",4)) #เรียกใช้ฟังก์ชัน LEFT ที่สร้างไว้ แบบระบุ 4 ตัว
print(LEFT("ThepExcel")) #เรียกใช้ฟังก์ชัน LEFT ที่สร้างไว้ แบบไม่ระบุจำนวน (default คือ 1)
เลียนแบบ TRIM ใน Excel
TRIM ใน Excel สามารถ TRIM ช่องว่างตรงกลางได้ด้วย แต่ใน Python เอาตรงกลางไม่ออก (เอาออกแต่หน้าหลัง) เราก็สามารถสร้าง TRIM มาใช้เองใน Pythonได้ แต่จะทำให้เจ๋งขึ้นอีกคือระบุตัวอักขระที่จะ Trim ออกได้ด้วย และเอาตรงกลางออกได้ด้วย ดังนี้
def TRIM(text,trim_char=" "): #สร้างฟังก์ชัน TRIM โดยให้ตัวที่จะ Trim เป็นเครื่องหมาย space
list1=text.split(trim_char) #split แตก item ออกมาตามตัวคั่น
print(list1)
list2=[x for x in list1 if x!=''] #คัดเลือกเอา item ที่ไม่ใช่ช่องว่าง
print(list2)
#เอาข้อความใน list2 มาต่อกันด้วย trim_char เหมือนเดิมด้วย ตัวคั่น.join(list)
outputText=trim_char.join(list2)
return outputText
print(TRIM(" Thep Excel "))
print(TRIM("...Thep.....Excel....","."))
เวลาใช้จริงก็ไม่ต้อง print step ระหว่างทางหรอก (อันนีั้นเราทำเพื่อตรวจสอบผลลัพธ์) ดังนั้นให้ comment ทิ้งไปเลยแบบนี้ก็ได้
ซึ่งแน่นอนว่าเราเอาฟังก์ชันที่สร้างไปใช้ประโยชน์ได้มากมาย เช่น เอาไปวน Loop ใน List เพื่อ clean ข้อมูลที่ต้องการก็ได้
def TRIM(text,trim_char=" "): #สร้างฟังก์ชัน TRIM
list1=text.split(trim_char)
list2=[x for x in list1 if x!='']
outputText=trim_char.join(list2)
return outputText
OriginalList=[" Thep Excel "," Sira Ekabut "," Eren Yeager "]
FixedList=[TRIM(x) for x in OriginalList] #เรียกใช้ฟังก์ชันใน List Comprehension ก็ได้
print(FixedList)
Recursion
Python นั้นรองรับการสร้างฟังก์ชันที่เรียกใช้งานตัวเองได้ด้วย
ยกตัวอย่างเช่น การสร้างการคำนวณ Factorial นั่นคือเอาเลขคูณกับตัวที่น้อยกว่าไปเรื่อยๆ จนถึง 1 (โดยที่ Factorial 0 มีค่าเป็น 1)
def FACT(num): #สร้างฟังก์ชัน Factorial
if num==0:
return 1 #ถ้า FACT(0) ให้เป็น 1
else:
return num*FACT(num-1) #นอกนั้นให้เอาเลขนั้น*FACT(เลขน้อยลง)
print(FACT(0)) #คือ 1
print(FACT(1)) #คือ 1*1
print(FACT(2)) #คือ 2*1*1
print(FACT(3)) #คือ 3*2*1*1
print(FACT(4)) #คือ 4*3*2*1*1
print(FACT(10)) #คือ 10*9*8*7*6*5*4*3*2*1*1
Lambda Function
นอกจากการสร้างฟังก์ชันขึ้นมาแบบจริงจังด้วย def แล้ว ใน Python ยังยอมให้เราสร้างสิ่งที่เรียกว่า Lambda Function (เป็น Anonymous Function หรือฟังก์ชันที่ไม่จำเป็นต้องมีชื่อ ) ขึ้นมาด้วย ซึ่งมันเป็นเหมือนการสร้างฟังก์ชันย่อมๆ ที่มี expression ได้แค่อันเดียว แต่จะมี input กี่ตัวก็ได้ ในรูปแบบ
lambda input1,input2,input3,... : expression
เช่น
myFunc=lambda a,b,c : (a*b)+c
print(myFunc(2,3,4))
มีค่าเท่ากับการทำแบบนี้เลย
ตอนต่อไป
ในที่สุดเราก็สามารถสร้างฟังก์ชันขึ้นมาใช้เองได้แล้ว แต่จะดีกว่ามั้ยถ้าเราจะใช้ฟังก์ชัน/ความสามารถเจ๋งๆ ที่คนอื่นได้สร้างไว้แล้วเต็ม internet เลย? ในตอนหน้าเราจะมาพูดถึงการใช้ Module/Packages กันครับ! นี่แหละสิ่งที่ทรงพลังที่สุดในความคิดของผม รอติดตามได้เลย เจ๋งแน่นอน
สารบัญ Series Python
- หัดเขียนโปรแกรม Python สำหรับคนเป็น Excel มาก่อน : ตอนที่ 1
- หัด Python สำหรับคนเป็น Excel : ตอนที่ 2 – ประเภทข้อมูล (Data Types)
- หัด Python สำหรับคนเป็น Excel : ตอนที่ 3 – การวน Loop และ เงื่อนไข if
- หัด Python สำหรับคนเป็น Excel : ตอนที่ 4 – การทำงานกับ String และ List
- หัด Python สำหรับคนเป็น Excel : ตอนที่ 5 – การสร้างฟังก์ชันขึ้นมาใช้เอง (Function)
- หัด Python สำหรับคนเป็น Excel : ตอนที่ 6 – การเรียกใช้ Module / Packages เจ๋งๆ ที่มีคนสร้างไว้แล้ว
- หัด Python สำหรับคนเป็น Excel : ตอนที่ 7 – Web Scraping ด้วย Beautiful Soup
- แนวทางการใช้ Python ใน Power BI
- หัด Python สำหรับคนเป็น Excel : ตอนที่ 8 – การสร้างกราฟด้วย Matplotlib
- รวม Link สอน Python / Programming / AI/ Machine Learning แบบฟรีๆ
- สอนใช้ Python ใน Excel ตอนที่ 1 : ลองใช้ครั้งแรก
- สอนใช้ Python ใน Excel ตอนที่ 2 : List, Loop, Condition
- สอนใช้ Python ใน Excel ตอนที่ 3 : Regular Expression (RegEx)
- สอนใช้ Python ใน Excel ตอนที่ 4 : สร้างฟังก์ชันใช้เอง
- สอนใช้ Python ใน Excel ตอนที่ 5 : สร้างกราฟ Visualization เบื้องต้นด้วย Matplotlib
- การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib
- เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python