ไพทอน (ภาษาโปรแกรม)

ไพทอน (Python) เป็นอินเทอร์พรีเตอร์ภาษาระดับสูงซึ่งสร้างโดยคีโด ฟัน โรสซึม โดยเริ่มใน พ.ศ. 2533 การออกแบบของภาษาไพทอนมุ่งเน้นให้ผู้โปรแกรมสามารถอ่านชุดคำสั่งได้โดยง่ายผ่านการใช้งานอักขระเว้นว่าง (whitespaces) จำนวนมาก นอกจากนั้นการออกแบบภาษาไพทอนและการประยุกต์ใช้แนวคิดการเขียนโปรแกรมเชิงวัตถุในตัวภาษายังช่วยให้นักเขียนโปรแกรมสามารถเขียนโปรแกรมที่เป็นระเบียบ อ่านง่าย มีขนาดเล็ก และง่ายต่อการบำรุง
ไพทอนเป็นภาษาแบบไดนามิกพร้อมตัวเก็บขยะ ไพทอนรองรับกระบวนทัศน์การเขียนโปรแกรมหลายรูปแบบ ซึ่งรวมถึงแต่ไม่จำกัดเพียงการเขียนโปรแกรมตามลำดับขั้น การเขียนโปรแกรมเชิงวัตถุ หรือการเขียนโปรแกรมเชิงฟังก์ชัน นอกจากนี้ไพทอนเป็นภาษาที่มักถูกอธิบายว่าเป็นภาษาโปรแกรมแบบ "มาพร้อมถ่าน" (batteries included) กล่าวคือไพทอนมาพร้อมกับไลบรารีมาตรฐานจำนวนมาก เช่นโครงสร้างข้อมูลแบบซับซ้อน และไลบรารีสำหรับคณิตศาสตร์
ไพทอนมักถูกมองว่าเป็นภาษาที่สร้างต่อจากภาษา ABC โดยไพทอน 2.0 ซึ่งออกเผยแพร่เมื่อ พ.ศ. 2543 มาพร้อมกับเครื่องมือสำหรับการเขียนโปรแกรมจำนวหนึ่ง อย่างเช่นตัวสร้างแถวรายการ (list comprehension)
ไพทอนรุ่น 3.0 เป็นไพทอนรุ่นที่ได้รับการปรับปรุงและแก้ไขจำนวนมาก ทว่าความเปลี่ยนแปลงไนไพทอน 3 นั้นเป็นการเปลี่ยนแปลงที่ไม่เข้ากันแบบย้อนหลัง กล่าวคือชุดคำสั่งที่เขียนสำหรับไพทอน 2 อาจไม่ทำงานตามปกติเมื่อสั่งให้ทำงานบนตัวแปลภาษาของไพทอน 3
ไพทอนรุ่น 2.0 หมดการสนับสนุนอย่างเป็นทางการใน พ.ศ. 2563 โดยการหมดการสนับสนุนนี้ถูกวางแผนตั้งแต่ พ.ศ. 2558 และไพทอนรุ่น 2.7.18 เป็นไพทอนรุ่น 2.7 และรุ่นตระกูล 2.0 ตัวสุดท้ายที่ออกเผยแพร่ โดยหลังจากนี้จะไม่มีการสนับสนุนความปลอดภัยหรือการปรับปรุงอื่นใดเพิ่มเติมสำหรับภาษาไพทอนรุ่น 2.0 อีก
อินเทอร์พรีเตอร์ของภาษาไพทอนสามารถใช้งานได้บนหลายระบบปฏิบัติการ ชุมชนนักพัฒนาโปรแกรมของไพทอนร่วมกันดูแลโครงการซีไพทอนโดยมีมูลนิธิซอฟต์แวร์ไพทอนซึ่งเป็นองค์กรไม่แสวงผลกำไร ทำหน้าที่ดูแลและจัดการทรัพยากรสำหรับการพัฒนาไพทอนและซีไพทอน
== คุณสมบัติและปรัชญาการออกแบบ ==
ผู้ใช้ภาษาไพทอนสามารถเลือกกระบวนทัศน์การเขียนโปรแกรมตามที่ตนเองถนัดได้ โดยรองรับการเขียนโปรแกรมเชิงโครงสร้างและการเขียนโปรแกรมเชิงวัตถุอย่างเต็มรูปแบบ รวมถึงรองรับการเขียนโปรแกรมเชิงฟังก์ชัน (ทั้งในรูปแบบของการเขียนโปรแกรมเชิงลักษณะ และการเขียนโปรแกรมเชิงเมตาออบเจกต์) ส่วนขยายของไพทอนทำให้สามารถเขียนโปรแกรมด้วยกระบวนทัศน์อื่น เช่นการเขียนโปรแกรมเชิงตรรกะ
ไพทอนเก็บข้อมูลแบบไดนามิก (dynamic type) และใช้ขั้นตอนวิธีการนับการอ้างอิง (Reference counting) ประกอบรวมกับตัวเก็บขยะ (garbage collector) เพื่อจัดการหน่วยความจำ
ไพทอนมาพร้อมเครื่องมือสำหรับการเขียนโปรแกรมเชิงฟังก์ชันแบบที่พบในภาษาลิสป์ นอกจากนี้ไพทอนมีเครื่องมืออย่างเช่นฟังก์ชัน filter map และ reduce, เครื่องมือการสร้างลิสต์ (list comprehension), แถวลำดับแบบจับคู่ (ในชื่อของ Dictionary), เซต และเครื่องมือสร้างการวนซ้ำ (generator)
แนวคิดและหลักการของไพทอนถูกสรุปในเอกสารชื่อว่า Zen of Python ซึ่งระบุหลักการของภาษาไว้เช่น
สวยงามดีกว่าน่าเกลียด (Beautiful is better than ugly.)
ชัดแจ้งดีกว่าซ่อนเร้น (Explicit is better than implicit.)
เรียบง่ายดีกว่าซับซ้อน (Simple is better than complex.)
ซับซ้อนดีกว่ายุ่งเหยิง (Complex is better than complicated.)
ต้องใส่ใจการอ่านออกได้ง่าย (Readability counts.)
ไพทอนไม่ได้ถูกออกแบบมาให้มีคุณสมบัติและความสามารถในการทำงานทุกอย่าง แต่ไพทอนถูกออกแบบมาให้สามารถถูกต่อยอดได้ง่าย การออกแบบในลักษณะนี้ทำให้ตัวของภาษาไพทอนได้รับความนิยมเนื่องด้วยความสามารถในการเพิ่มส่วนต่อขยายหรือชุดคุณสมบัติลงไปในแอปพลิเคชันที่มีอยู่ก่อนหน้านี้ การออกแบบในลักษณะนี้มาจากวิสัยทัศน์ของฟัน โรสซึมที่ต้องการเห็นการออกแบบภาษาโปรแกรมที่มีระบบแกนกลางขนาดเล็ก แต่มาพร้อมไลบรารีชุดคำสั่งขนาดใหญ่ โดยเป้าหมายการออกแบบลักษณะนี้มาจากความไม่สะดวกในการใช้ภาษา ABC ที่ฟัน โรสซึมเคยเจอมาก่อนหน้านี้
โครงสร้างทางวากยสัมพันธ์ (syntax) ของภาษาไพทอนมุ่งเน้นความเรียบง่ายและไม่ยุ่งเหยิง ในขณะเดียวกันยังคงให้อิสระกับนักพัฒนาโปรแกรมในการเลือกวิธีการเขียนโปรแกรมได้เอง ปรัชญาการออกแบบนี้ของไพทอนอยู่บนความเชื่อที่ว่า "ควรจะมีทางเดียว—และทางเดียวเท่านั้น—ในการทำอะไรสักอย่าง"  ("there should be one—and preferably only one—obvious way to do it") ซึ่งตรงกันข้ามกับแนวคิดการออกแบบของภาษาเพิร์ลที่เชื่อว่า "เราควรทำอะไรได้มากกว่าหนึ่งวิธี" ("There's more than one way to do it") หากจะกล่าวให้ละเอียด อะเล็กซ์ มาร์เตลลี ผู้เขียนตำราภาษาไพทอน และสมาชิกของมูลนิธิซอฟต์แวร์ไพทอน กล่าวว่า "ในวัฒนธรรมของไพทอน การอธิบายว่า[วิธีการเขียนโปรแกรม]บางอย่างนั้นฉลาดมากไม่ถือเป็นคำชม"
นักพัฒนาโปรแกรมที่ใช้ภาษาไพทอนมักพยายามหลีกเลี่ยงการปรับปรุงประสิทธิภาพก่อนถึงเวลาอันควร (premature optimisation) และมักปฏิเสธการรวมโค้ดของโครงการ CPython ที่ต้องแลกประสิทธิภาพที่เพิ่มขึ้นมาเล็กน้อยกับความอ่านยากของโค้ด โดยเมื่อต้องเขียนชุดคำสั่งที่เวลาประมวลผลเป็นเรื่องสำคัญ นักพัฒนาโปรแกรมไพทอนจะนิยมเขียนส่วยขยายของโปรแกรมนั้นด้วยภาษา C แยกออกมา หรือใช้ PyPy ซึ่งเป็นตัวแปลภาษาแบบในเวลา (Just-in-time compiler) สำหรับภาษาไพทอน นอกจากนี้นักพัฒนายังมีตัวเลือกอื่นเช่นการใช้ไซทอนซึ่งเป็นตัวแปลรหัสคำสั่งจากภาษาไพทอนไปเป็นภาษาซี
หนึ่งในเป้าหมายสำคัญของภาษาไพทอนคือความสนุกในการใช้งาน ชื่อของภาษาโปรแกรมมิงไพทอนนั้นมาจากชื่อของกลุ่มนักแสดงตลก Monty Python จากประเทศอังกฤษ ความมุ่งมั่นในการทำให้ภาษาไพทอนนั้นสนุกต่อการใช้นั้นพบเห็นได้เพิ่มเติมจากตัวอย่างของชุดคำสั่งในภาษาไพทอนบนเว็บไซต์ของโครงการไพทอนเอง ซึ่งเลือกใช้คำอย่างเช่น "spam and eggs" (เพื่อล้อกับตอนหนึ่งของรายการตลกจาก Monty Python) แทนที่จะเลือกใช้คำทั่วไปอย่าง foo และ bar ตามตัวอย่างภาษาโปรแกรมมิงอื่น
ชุมชนไพทอนมักนิยมใช้วลี "มีความเป็นไพทอน" (Pythonic) เพื่อกล่าวถึงรูปแบบของชุดคำสั่งของไพทอนที่มีความสะอาดสะอ้านและถูกเขียนขึ้นในลักษณะที่สอดคล้องกับปรัชญาการออกแบบดังกล่าว กล่าวคือมีความอ่านง่ายและแสดงถึงความรู้ในการเขียนชุดคำสั่งภาษาไพทอนได้เป็นอย่างดี ในทางตรงกันข้าม ชุดคำสั่งที่ไม่สามารถอ่านได้โดยง่าย (กล่าวคือชุดคำสั่งที่เหมือนการแปลงชุดคำสั่งจากภาษาโปรแกรมอื่นมาเป็นไพทอนแบบบรรทัดต่อบรรทัด) มักจะถูกเรียกว่าชุดคำสั่งที่ "ไม่มีความเป็นไพทอน" (Unpythonic)
ผู้ใช้ ผู้หลงใหล หรือผู้สันทัดภาษาไพทอนมักได้รับการขนานนามว่าเป็น "ไพธอนิสตา" (Pythonista)
== จุดเด่นของภาษาไพทอน ==
=== ความเป็นภาษาสคริปต์ ===
เนื่องจากไพทอนเป็นภาษาสคริปต์ ทำให้ใช้เวลาในการเขียนและคอมไพล์ไม่มาก ทำให้เหมาะกับงานด้านการดูแลระบบ (System administration) เป็นอย่างยิ่ง มีการสนับสนุนภาษาไพทอนโดยเป็นส่วนหนึ่งของระบบปฏิบัติการยูนิกซ์, ลินุกซ์ และสามารถติดตั้งให้ทำงานเป็นภาษาสคริปต์ของวินโดวส์ ผ่านระบบ Windows Script Host ได้อีกด้วย
=== ไวยากรณ์ที่อ่านง่าย ===
ไวยากรณ์ของไพทอนได้กำจัดการใช้สัญลักษณ์ที่ใช้ในการแบ่งบล็อกของโปรแกรม และใช้การย่อหน้าแทน ทำให้สามารถอ่านโปรแกรมที่เขียนได้ง่าย นอกจากนั้นยังมีการสนับสนุนการเขียน docstring ซึ่งเป็นข้อความสั้น ๆ ที่ใช้อธิบายการทำงานของฟังก์ชัน, คลาส และโมดูลอีกด้วย
=== ความเป็นภาษากาว ===
ไพทอนเป็นภาษากาว (Glue Language) ได้อย่างดีเนื่องจากสามารถเรียกใช้ภาษาโปรแกรมอื่น ๆ ได้หลายภาษา ทำให้เหมาะที่จะใช้เขียนเพื่อประสานงานโปรแกรมที่เขียนในภาษาต่างกันได้
== ตัวอย่างภาษาโปรแกรมไพทอน ==
ตัวอย่างด้านล่างเป็นตัวอย่างสำหรับโปรแกรมซึ่งเขียนด้วยภาษาไพทอน 3 ซึ่งมีโครงสร้างทางวากยสัมพันธ์ต่างจากไพทอน 2
=== โปรแกรมสวัสดีชาวโลก ===
print('Hello, world!')
หรือ
print("Hello world!")
=== โปรแกรมสำหรับการคำนวณเลขแฟกทอเรียลของจำนวนเต็มบวกใด ๆ ===
คำสั่งในบรรทัดด้านล่างรับเข้าตัวเลข ก่อนแปลงเป็นจำนวนเต็มบวก
ชุดคำสั่ง `int` ในไพทอนจะตัดทศนิยมทิ้งโดยอัตโนมัติ
n = int(input('กรุณาป้อนข้อมูลรับเข้าตัวเลขใด ๆ เพื่อคำนวณค่าแฟกทอเรียล: '))
หากตัวเลขมีค่าน้อยกว่า 0 ให้ทำการยกแสดงข้อผิดพลาด (error raising)
โดยให้แสดงข้อผิดพลาดแบบ `ValueError` ขึ้นมา
if n 
== ไพทอนในแพลตฟอร์มต่าง ๆ ==
ผู้เขียนโปรแกรมภาษาไพทอนสามารถเลือกใช้แพลตฟอร์ม
=== ซีไพทอน ===
ซีไพทอน (CPython) คือแพลตฟอร์มภาษาไพทอนดั้งเดิม โปรแกรมอินเทอร์พรีเตอร์ถูกเขียนโดยภาษาซี ซึ่งคอมไพล์ใช้ได้บนหลายระบบปฏิบัติการ เช่น วินโดวส์, ยูนิกซ์, ลินุกซ์ การใช้งานสามารถทำได้โดยการติดตั้งโปรแกรมอินเทอร์พรีเตอร์และแพ็คเกจที่จำเป็นต่าง ๆ
=== ไจธอน ===
ไจทอน (Jython) เป็นแพลตฟอร์มภาษาไพทอนที่ถูกพัฒนาบนแพลตฟอร์มจาวา เพื่อเพิ่มอำนวยความสะดวกในการใช้ความสามารถภาษาสคริปต์ของไพทอนลงในซอฟต์แวร์จาวาอื่น ๆ
การใช้งานสามารถทำได้โดยการติดตั้งจาวาและเรียกไลบรารีของไจธอนซึ่งมาในรูปไบนารีเพื่อใช้งาน
=== ไพทอนดอตเน็ต ===
Python.NET เป็นการพัฒนาภาษาไพทอนให้สามารถทำงานบนดอตเน็ตเฟรมเวิร์กของไมโครซอฟท์ได้ โดยโปรแกรมที่ถูกเขียนจะถูกแปลงเป็น CLR ปัจจุบันมีโครงการที่นำภาษาไพทอนมาใช้บน .NET Framework ของไมโครซอฟท์แล้วคือโครงการ IronPython
== ไลบรารีในไพทอน ==
การเขียนโปรแกรมในภาษาไพทอนโดยใช้ไลบรารีต่าง ๆ เป็นการลดภาระของโปรแกรมเมอร์ได้เป็นอย่างดี ทำให้โปรแกรมเมอร์ไม่ต้องเสียเวลากับการเขียนคำสั่งที่ซ้ำ ๆ เช่นการแสดงผลข้อมูลออกสู่หน้าจอ หรือการรับค่าต่าง ๆ
ไพทอนมีชุดไลบรารีมาตรฐานมาให้ตั้งแต่ติดตั้งอินเตอร์พรีเตอร์ นอกจากนั้นยังมีผู้พัฒนาจากทั่วโลกดำเนินการพัฒนาไลบรารีซึ่งช่วยอำนวยความสะดวกในด้านต่าง ๆ โดยจะเผยแพร่ในรูปแบบของแพ็คเกจต่าง ๆ ซึ่งสามารถติดตั้งเพิ่มเติมได้อีกด้วย
=== แพ็คเกจเพิ่มเติมที่น่าสนใจ ===
wxPython: อีกทางเลือกหนึ่งสำหรับเขียนส่วนติดต่อกับผู้ใช้แบบกราฟิกส์ ซึ่งสามารถใช้ได้หลายระบบปฏิบัติการ
SciPy: รวมโครงสร้างข้อมูลและการคำนวณต่าง ๆ ที่จำเป็นต้องใช้ในการเขียนโปรแกรมคำนวณทางวิทยาศาสตร์
py2exe: ใช้สำหรับแปลงโปรแกรมที่เขียนในภาษาไพทอนให้อยู่ในรูปแบบของ ในระบบปฏิบัติการวินโดวส์
PyWin32: ใช้สำหรับติดต่อเรียกใช้บริการบนระบบปฏิบัติการวินโดวส์และคลาสใน Microsoft Foundation Classes: MFC
MySQLdb: ใช้สำหรับติดต่อกับระบบฐานข้อมูล MySQL
psycopg2: ใช้สำหรับติดต่อกับระบบฐานข้อมูล โพสต์เกรสคิวเอล
PyGTK: GTK+ สำหรับ Python ใช้สำหรับสร้างส่วนติดต่อกับผู้ใช้แบบกราฟิกส์ ซึ่งสามารถใช้ได้หลายระบบปฏิบัติการ
PyQt: คิวต์ (วิจิททูลคิทสำหรับพัฒนาส่วนต่อประสานกราฟิกกับผู้ใช้ (GUI)) สำหรับ Python ใช้สำหรับสร้างส่วนติดต่อกับผู้ใช้แบบกราฟิกส์ ซึ่งสามารถใช้ได้หลายระบบปฏิบัติการ
== อ้างอิง ==
== แหล่งข้อมูลอื่น ==
เว็บหลักของไพทอน (อังกฤษ)
ภาษาโปรแกรมแบบคลาส
ภาษาโปรแกรมที่มีชนิดข้อมูลแบบพลวัต
ภาษาโปรแกรมเชิงวัตถุ
ภาษาสคริปต์
ซอฟต์แวร์บนยูนิกซ์