ฟังก์ชั่น หรือ function ก็คือ ชุดของคำสั่งที่ต้องทำตามลำดับนั่นเอง แทนที่จะเป็นคำสั่ง 10 บรรทัดที่ใช้ 10 ที่ ทำให้โปรแกรมยาว 100 บรรทัด เวลาเจอที่ผิดก็ต้องแก้ 10 ที่ ก็เปลี่ยนเป็น 10 บรรทัด 1 ที่สำหรับประกาศ ฟังก์ชั่น และอย่างละ 1 บรรทัดสำหรับตอนเรียกใช้งาน
มีหลายคนกลัวการใช้ ฟังก์ชั่น กลัวว่ายาก กลัวว่าไม่เข้าใจ กลัวไม่รู้เรื่อง กลัวพลาด กลัวสารพัด ทุกครั้งที่เขียนก็มักคัดลอกคำสั่งชุดนั้นไปทุกที่ที่ใช้โดยไม่เขียน ฟังก์ชั่น เวลามีใครมาทักก็จะบอกว่า เขียนให้เสร็จแล้วค่อยแก้ก็ได้ สาเหตุใหญ่ๆ เป็นเพราะ เข้าใจผิด ฟังก์ชั่น ไม่ได้มีไว้เพื่อให้โปรแกรมสวย แต่มีไว้เพื่อทำให้ความซับซ้อนของโปรแกรมลดน้อยลงโดยการทำให้ส่วนของโปรแกรมที่ทำหน้าที่ร่วมกันมีชื่อเรียกแทนที่จะเป็นคำสั่งหลายบรรทัดยาวๆ ด้วยเหตุนี้ ฟังก์ชั่น จึงช่วยให้โปรแกรมคล้ายกับ อัลกอริทึ่ม และเข้าใจได้ง่าย
ใน ไพธอน นั้น ฟังก์ชั่น ไม่ใช่เรื่องน่ากลัวแต่อย่างใด ลองมาดูแบบง่ายๆ กันก่อน
def hello(): print 'Hello'
ฟังก์ชั่น hello มีไว้สำหรับพิมพ์คำว่า Hello ออกมาทุกครั้งที่ถูกเรียกใช้ วิธีเรียกใช้นั่นยิ่งง่าย เพียงแค่เรียก hello() เท่านั้นเอง เมื่อนำมารวมกับ ลูป ก็จะดูมีประโยชน์ขึ้นมาทันที
hello() print 'begin' for i in range(10): hello() print 'end' hello()
ทีนี้ลองมาดูว่า ฟังก์ชั่น มีประโยชน์ยังไง โดยการเปลี่ยนโจทย์ให้พิมพ์คำว่า Hello, World แทน ถ้าไม่ได้เขียนด้วย ฟังก์ชั่น ก็ต้องแก้ 3 ที่ แต่เพราะเราใช้ ฟังก์ชั่น ผลบุญเลยช่วยให้แก้แค่เพียงที่เดียวเท่านั้น
ตัวอย่างที่ผ่านมาเป็นเพียง ฟังก์ชั่น แบบง่าย ไม่มี พารามิเตอร์ แต่อย่างใด ฟังก์ชั่นพวกนี้มันมีไว้สำหรับงานง่ายๆ ที่ต้องทำซ้ำๆ กันบ่อยๆ ตัวอย่างถัดมาเป็น ฟังก์ชั่น ที่มี พารามิเตอร์ กันบ้าง
def hello(p): print 'Hello, World',p for i in range(10): hello(i)
ฟังก์ชั่นนี้จะรับ พารามิเตอร์ 1 ตัว และนำมาพิมพ์ต่อท้ายคำว่า Hello, World โดยที่ไม่สนว่า พารามิเตอร์นั้นจะเป็นชนิดอะไร ในกรณีที่ต้องการส่ง พารามิเตอร์ มากกว่า 1 ตัวก็สามารถทำได้โดยใช้ comma , ขั้นทั้งตอนประกาศและเรียกใช้
def hello(s,i): print s,i
นอกจากนี้แล้ว ฟังก์ชั่น ยังสามารถคืนค่ากลับมาได้ด้วยคำสั่ง return อีกด้วย ค่าที่ส่งคืนนี้มาเป็นข้อมูลชนิดใดก็ได้ รวมไปถึง list tuple และ dictionary
def hello(s,i): return '%s,%i' % (s,i) for i in range(10): print hello('Hello, World',i)
