---
title: "หัด Python สำหรับคนเป็น Excel : ตอนที่ 5 – การสร้างฟังก์ชันขึ้นมาใช้เอง (Function)"
url: https://www.thepexcel.com/python-excel-05-function/
type: post
date: 2020-11-25
updated: 2025-04-24
author: Sira Ekabut
categories: [Programming]
tags: [function, python, LAMBDA]
---

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

เวลาเราเขียนโปรแกรม เราสามารถสั่งให้โปรแกรมทำงานกับข้อมูลด้วย[คำสั่งต่างๆ อย่างที่เราได้เรียนรู้ไปในตอนที่แล้ว](https://www.thepexcel.com/python-excel-04-string-list/) อย่างไรก็ตาม คำสั่งมาตรฐานอาจจะไม่เพียงพอต่อความต้องการของเรา ดังนั้นวิธีการที่จะช่วยได้คือ เราจะสร้างฟังก์ชันที่ทำงานได้ตรงใจเราขึ้นมาเอง

 

ลองคิดดูว่าใน 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 ที่สร้างไว้
```

 ![1](https://www.thepexcel.com/wp-content/uploads/2020/11/Python05-001.png) 

### เลียนแบบ 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)
```

 ![2](https://www.thepexcel.com/wp-content/uploads/2020/11/Python05-002.png) 

### เลียนแบบ 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....","."))
```

 ![3](https://www.thepexcel.com/wp-content/uploads/2020/11/Python05-003x.png) 

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

 ![4](https://www.thepexcel.com/wp-content/uploads/2020/11/Python05-004.png) 

ซึ่งแน่นอนว่าเราเอาฟังก์ชันที่สร้างไปใช้ประโยชน์ได้มากมาย เช่น เอาไปวน 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)
```

 ![5](https://www.thepexcel.com/wp-content/uploads/2020/11/Python05-005.png) 

## 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
```

 ![6](https://www.thepexcel.com/wp-content/uploads/2020/11/Python05-008.png) 

## Lambda Function

 

นอกจากการสร้างฟังก์ชันขึ้นมาแบบจริงจังด้วย def แล้ว ใน Python ยังยอมให้เราสร้างสิ่งที่เรียกว่า Lambda Function (เป็น Anonymous Function หรือฟังก์ชันที่ไม่จำเป็นต้องมีชื่อ ) ขึ้นมาด้วย ซึ่งมันเป็นเหมือนการสร้างฟังก์ชันย่อมๆ ที่มี expression ได้แค่อันเดียว แต่จะมี input กี่ตัวก็ได้ ในรูปแบบ

 

```markdown
lambda input1,input2,input3,... : expression
```

 

เช่น

 

```
myFunc=lambda a,b,c : (a*b)+c
print(myFunc(2,3,4))
```

 ![7](https://www.thepexcel.com/wp-content/uploads/2020/11/Python05-009.png) 

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

 ![8](https://www.thepexcel.com/wp-content/uploads/2020/11/Python05-010.png) 

## ตอนต่อไป

 

ในที่สุดเราก็สามารถสร้างฟังก์ชันขึ้นมาใช้เองได้แล้ว แต่**จะดีกว่ามั้ยถ้าเราจะใช้ฟังก์ชัน/ความสามารถเจ๋งๆ ที่คนอื่นได้สร้างไว้แล้วเต็ม internet เลย?** ในตอนหน้าเราจะมาพูดถึง[การใช้ Module/Packages](https://www.thepexcel.com/python-excel-06-module-packages/) กันครับ! นี่แหละสิ่งที่ทรงพลังที่สุดในความคิดของผม รอติดตามได้เลย เจ๋งแน่นอน

  

## สารบัญ Series Python

---

_Source: [https://www.thepexcel.com/python-excel-05-function/](https://www.thepexcel.com/python-excel-05-function/)_
