python function

หัด Python สำหรับคนเป็น Excel : ตอนที่ 5 – การสร้างฟังก์ชันขึ้นมาใช้เอง (Function)

เวลาเราเขียนโปรแกรม เราสามารถสั่งให้โปรแกรมทำงานกับข้อมูลด้วยคำสั่งต่างๆ อย่างที่เราได้เรียนรู้ไปในตอนที่แล้ว อย่างไรก็ตาม คำสั่งมาตรฐานอาจจะไม่เพียงพอต่อความต้องการของเรา ดังนั้นวิธีการที่จะช่วยได้คือ เราจะสร้างฟังก์ชันที่ทำงานได้ตรงใจเราขึ้นมาเอง

ลองคิดดูว่าใน 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 ที่สร้างไว้
หัด Python สำหรับคนเป็น Excel : ตอนที่ 5 – การสร้างฟังก์ชันขึ้นมาใช้เอง (Function) 1

เลียนแบบ 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)
หัด Python สำหรับคนเป็น Excel : ตอนที่ 5 – การสร้างฟังก์ชันขึ้นมาใช้เอง (Function) 2

เลียนแบบ 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....","."))
หัด Python สำหรับคนเป็น Excel : ตอนที่ 5 – การสร้างฟังก์ชันขึ้นมาใช้เอง (Function) 3

เวลาใช้จริงก็ไม่ต้อง print step ระหว่างทางหรอก (อันนีั้นเราทำเพื่อตรวจสอบผลลัพธ์) ดังนั้นให้ comment ทิ้งไปเลยแบบนี้ก็ได้

หัด Python สำหรับคนเป็น Excel : ตอนที่ 5 – การสร้างฟังก์ชันขึ้นมาใช้เอง (Function) 4

ซึ่งแน่นอนว่าเราเอาฟังก์ชันที่สร้างไปใช้ประโยชน์ได้มากมาย เช่น เอาไปวน 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)
หัด Python สำหรับคนเป็น Excel : ตอนที่ 5 – การสร้างฟังก์ชันขึ้นมาใช้เอง (Function) 5

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
หัด Python สำหรับคนเป็น Excel : ตอนที่ 5 – การสร้างฟังก์ชันขึ้นมาใช้เอง (Function) 6

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))
หัด Python สำหรับคนเป็น Excel : ตอนที่ 5 – การสร้างฟังก์ชันขึ้นมาใช้เอง (Function) 7

มีค่าเท่ากับการทำแบบนี้เลย

หัด Python สำหรับคนเป็น Excel : ตอนที่ 5 – การสร้างฟังก์ชันขึ้นมาใช้เอง (Function) 8

ตอนต่อไป

ในที่สุดเราก็สามารถสร้างฟังก์ชันขึ้นมาใช้เองได้แล้ว แต่จะดีกว่ามั้ยถ้าเราจะใช้ฟังก์ชัน/ความสามารถเจ๋งๆ ที่คนอื่นได้สร้างไว้แล้วเต็ม internet เลย? ในตอนหน้าเราจะมาพูดถึงการใช้ Module/Packages กันครับ! นี่แหละสิ่งที่ทรงพลังที่สุดในความคิดของผม รอติดตามได้เลย เจ๋งแน่นอน

สารบัญ Series Python

อบรม In-House Training

Feedback การใช้งาน AI Chatbot