อ่าน 39 นาที
ไพธอน (ภาษาโปรแกรม)
Python เป็น ภาษาโปรแกรม ระดับ สูง อเนกประสงค์ ที่เน้น ความสามารถในการอ่านโค้ด ความเรียบง่าย และความง่ายในการเขียน โค้ด โดยใช้ การเยื้องที่สำคัญ [ 38 ] ไลบรารีมาตรฐาน ที่ครอบคลุม...
ไพธอน (ภาษาโปรแกรม)
| บทความนี้เป็นส่วนหนึ่งของชุดบทความเกี่ยวกับ... |
| ไพธอน |
|---|
Pythonเป็น ภาษาโปรแกรม ระดับสูงอเนกประสงค์ที่เน้นความสามารถในการอ่านโค้ด ความเรียบง่าย และความง่ายในการเขียน โค้ดโดยใช้การเยื้องที่สำคัญ [ 38 ]ไลบรารีมาตรฐานที่ครอบคลุม ("รวมทุกอย่าง") และการเก็บขยะ Python รองรับกระบวนทัศน์การเขียนโปรแกรม หลายแบบ แต่เน้นที่การเขียนโปรแกรมเชิงวัตถุและ การกำหนดประเภท แบบ ไดนามิก
Guido van Rossumเริ่มพัฒนา Python ในช่วงปลายทศวรรษ 1980 โดยมีเป้าหมายเพื่อพัฒนาต่อยอดจาก ภาษาโปรแกรม ABC Python 3.0 ซึ่งวางจำหน่ายในปี 2008 เป็นการปรับปรุงครั้งใหญ่และไม่สามารถใช้งานร่วมกับเวอร์ชันก่อนหน้าได้อย่างสมบูรณ์ ตั้งแต่ Python 3.5 เป็นต้นไป[ 39 ]ได้มีการเพิ่มความสามารถและคำหลักสำหรับการกำหนดประเภทข้อมูลลงในภาษา ทำให้สามารถใช้การกำหนดประเภทข้อมูลแบบคงที่ได้[ 40 ]ณ ปี 2026 มูลนิธิซอฟต์แวร์ Pythonให้การสนับสนุน Python 3.10, 3.11, 3.12, 3.13 และ 3.14 ตามรอบการวางจำหน่ายประจำปีและนโยบายการสนับสนุนห้าปีของโครงการ ปัจจุบัน Python 3.15 อยู่ในขั้นตอนการพัฒนาเบต้า และคาดว่าจะวางจำหน่ายเวอร์ชันเสถียรในเดือนตุลาคม 2026 [ 41 ]เวอร์ชันก่อนหน้าในซีรี่ส์ 3.x หมดอายุการใช้งานแล้วและจะไม่ได้รับการอัปเดตด้านความปลอดภัยอีกต่อไป
Python ได้รับการใช้งานอย่างแพร่หลายในชุมชนการเรียนรู้ของเครื่อง[ 42 ] [ 43 ] [ 44 ] [ 45 ]มีการสอนกันอย่างแพร่หลายในฐานะภาษาโปรแกรมเบื้องต้น[ 46 ]ตั้งแต่ปี 2003 Python ได้รับการจัดอันดับให้อยู่ใน 10 อันดับแรกของภาษาโปรแกรมยอดนิยมอย่างต่อเนื่องใน ดัชนีชุมชนการเขียนโปรแกรม TIOBEซึ่งจัดอันดับภาษาโปรแกรมตามการค้นหาใน 24 แพลตฟอร์ม[ 47 ]
ประวัติศาสตร์

ภาษา Python ถูกคิดค้นขึ้นในช่วงปลายทศวรรษ 1980 [ 11 ]โดยGuido van Rossumที่Centrum Wiskunde & Informatica (CWI) ในประเทศเนเธอร์แลนด์[ 48 ] มันถูกออกแบบมาให้เป็นภาษาโปรแกรมที่สืบทอดมาจากภาษาABCซึ่งได้รับแรงบันดาลใจจากSETL [ 49 ]ที่สามารถจัดการกับข้อยกเว้นและเชื่อมต่อกับระบบปฏิบัติการAmoeba ได้[ 18 ]การใช้งาน Python เริ่มขึ้นในเดือนธันวาคม 1989 [ 48 ] Van Rossum เปิดตัวครั้งแรกในปี 1991 ในชื่อ Python 0.9.0 [ 48 ] Van Rossum รับผิดชอบโครงการนี้แต่เพียงผู้เดียวในฐานะนักพัฒนาหลัก จนกระทั่งวันที่ 12 กรกฎาคม 2018 เมื่อเขาประกาศ "ลาพักร้อนถาวร" จากความรับผิดชอบในฐานะ " เผด็จการใจดีตลอดชีวิต " (BDFL) ของ Python; ชื่อนี้มอบให้เขาโดยชุมชน Python เพื่อสะท้อนถึงความมุ่งมั่นระยะยาวของเขาในฐานะผู้มีอำนาจตัดสินใจหลักของโครงการ[ 50 ] [ c ]ในเดือนมกราคม 2019 นักพัฒนาหลักของ Python ที่กระตือรือร้นได้เลือกคณะกรรมการบริหาร 5 คนเพื่อนำโครงการ[ 51 ] [ 52 ]
ชื่อPythonมาจากซีรีส์ตลกของอังกฤษเรื่องMonty Python's Flying Circus [ 53 ] (ดู§ การตั้งชื่อ )
Python 2.0 เปิดตัวเมื่อวันที่ 16 ตุลาคม พ.ศ. 2543 โดยมีคุณสมบัติใหม่มากมาย เช่นlist comprehensions , การเก็บขยะแบบตรวจจับวงจร , การนับการอ้างอิงและการรองรับUnicode [ 54 ] เดิมที Python 2.7 มีกำหนด สิ้นสุดการสนับสนุนในปี พ.ศ. 2558 แต่ต่อมาได้เลื่อนออกไปเป็นปี พ.ศ. 2563 เนื่องจากกังวลว่าโค้ดที่มีอยู่จำนวนมากจะไม่สามารถพอร์ตไปยัง Python 3 ได้ง่าย[ 55 ] [ 56 ]ปัจจุบันไม่มีการแก้ไขช่องโหว่ด้านความปลอดภัยหรือการอัปเดตอีกต่อไป[ 57 ] [ 58 ] แม้ว่า Python 2.7 และเวอร์ชันเก่ากว่าจะไม่ได้รับการสนับสนุนอย่างเป็นทางการ แต่ PyPyซึ่งเป็นการใช้งาน Python อย่างไม่เป็นทางการอีกแบบหนึ่งยังคงสนับสนุน Python 2 เช่น "2.7.18+" (บวก 3.11) โดยเครื่องหมายบวกหมายถึง (อย่างน้อยบางส่วน) " การอัปเดตความปลอดภัย ที่พอร์ตกลับมา " [ 59 ]
Python 3.0 เปิดตัวเมื่อวันที่ 3 ธันวาคม พ.ศ. 2551 และเป็นการปรับปรุงครั้งใหญ่และไม่สามารถใช้งานร่วมกับเวอร์ชันก่อนหน้าได้อย่างสมบูรณ์ โดยมีการเปลี่ยนแปลงความหมายและไวยากรณ์บางส่วน Python 2.7.18 ซึ่งเปิดตัวในปี พ.ศ. 2563 เป็นเวอร์ชันสุดท้ายของ Python 2 [ 60 ]การเปิดตัวหลายครั้งในซีรีส์ Python 3.x ได้เพิ่มไวยากรณ์ใหม่ให้กับภาษา และทำการเปลี่ยนแปลงเล็กน้อย (ซึ่งถือว่าเล็กน้อยมาก) ที่ไม่สามารถใช้งานร่วมกับเวอร์ชันก่อนหน้าได้
ณ เดือนพฤษภาคม 2026 Python 3.14.6 เป็นเวอร์ชันเสถียรล่าสุด เวอร์ชัน 3.x เก่าทั้งหมดได้รับการอัปเดตความปลอดภัยจนถึง Python 3.9.24 จากนั้นอีกครั้งด้วย 3.9.25 ซึ่งเป็นเวอร์ชันสุดท้ายในซีรี่ส์ 3.9 Python 3.10 เป็นสาขาที่เก่าที่สุดที่ได้รับการสนับสนุนนับตั้งแต่เดือนพฤศจิกายน 2025 [ 61 ] Python 3.15 มีเวอร์ชันอัลฟ่าออกมาแล้ว และ Android มีไฟล์ปฏิบัติการที่ดาวน์โหลดได้อย่างเป็นทางการสำหรับ Python 3.14 การเผยแพร่จะได้รับการสนับสนุนเต็มรูปแบบเป็นเวลาสองปี ตามด้วยการสนับสนุนด้านความปลอดภัยเป็นเวลาสามปี
ปรัชญาการออกแบบและคุณสมบัติ
Python เป็นภาษาโปรแกรมแบบหลายพาราดิกม์ รองรับการเขียนโปรแกรมเชิงวัตถุและการเขียนโปรแกรมเชิงโครงสร้างอย่างเต็มที่ และคุณสมบัติหลายอย่างยังรองรับการเขียนโปรแกรมเชิงฟังก์ชันและการเขียนโปรแกรมเชิงแง่มุมรวมถึงเมตาโปรแกรมมิง[ 62 ]และเมตาออบเจ็กต์ [ 63 ] พาราดิกม์อื่นๆ อีกมากมายได้รับการสนับสนุนผ่านส่วนขยาย รวมถึงการออกแบบโดยสัญญา[ 64 ] [ 65 ]และ การ เขียนโปรแกรมเชิงตรรกะ[ 66 ] Python มักถูกเรียกว่า'ภาษาเชื่อมต่อ' [ 67 ]เนื่องจากได้รับการออกแบบมาโดยเฉพาะเพื่อให้สามารถรวมส่วนประกอบที่เขียนด้วยภาษาอื่นๆ ได้
Python ใช้การกำหนดประเภทแบบไดนามิกและการผสมผสานระหว่างการนับการอ้างอิงและตัวเก็บขยะที่ตรวจจับวงจรสำหรับ การจัดการหน่วย ความจำ[ 68 ]มันใช้การแก้ไขชื่อ แบบไดนามิก ( การผูกแบบล่าช้า ) ซึ่งผูกชื่อเมธอดและตัวแปรในระหว่างการดำเนินการโปรแกรม
การออกแบบของ Python ให้การสนับสนุนบางส่วนสำหรับการเขียนโปรแกรมเชิงฟังก์ชันใน " ประเพณี Lisp " โดยมีฟังก์ชันfilter, map, และ ; การ สร้างลิส ต์แบบเข้าใจง่ายพจนานุกรมเซตและนิพจน์ตัวสร้าง[ 69 ]ไลบรารีมาตรฐานมีโมดูลสองโมดูล ( และ) ที่ใช้เครื่องมือเชิงฟังก์ชันที่ยืมมาจากHaskellและStandard ML [ 70 ]reduceitertoolsfunctools
ปรัชญาหลักของ Python สรุปไว้ในZen of Python (PEP 20) ที่เขียนโดยTim Petersซึ่งรวมถึงสุภาษิตต่างๆ เช่นนี้: [ 71 ]
- การระบุอย่างชัดเจนย่อมดีกว่าการระบุโดยนัย
- ความเรียบง่ายดีกว่าความซับซ้อน
- ความอ่านง่ายเป็นสิ่งสำคัญ
- กรณีพิเศษเหล่านั้นไม่ได้พิเศษมากพอที่จะเป็นข้อยกเว้นของกฎเกณฑ์
- แม้ว่าความเหมาะสมในทางปฏิบัติจะสำคัญกว่าความบริสุทธิ์ แต่ความผิดพลาดก็ไม่ควรถูกมองข้ามไปโดยปริยาย เว้นแต่จะมีการปิดบังอย่างชัดเจน
- ควรจะมีวิธีที่ชัดเจนเพียงวิธีเดียวในการทำเช่นนั้น และควรจะมีเพียงวิธีเดียวเท่านั้น
อย่างไรก็ตาม Python ได้รับการวิพากษ์วิจารณ์ว่าละเมิดหลักการเหล่านี้และเพิ่มส่วนเกินของภาษาที่ไม่จำเป็น[ 72 ]การตอบสนองต่อคำวิจารณ์เหล่านี้ระบุว่า Zen of Python เป็นแนวทางมากกว่ากฎ[ 73 ]การเพิ่มคุณสมบัติใหม่บางอย่างเป็นที่ถกเถียงกัน: Guido van Rossum ลาออกจากตำแหน่งBenevolent Dictator for Lifeหลังจากเกิดความขัดแย้งเกี่ยวกับการเพิ่มตัวดำเนินการนิพจน์การกำหนดค่าในPython 3.8 [ 74 ] [ 75 ]
อย่างไรก็ตาม แทนที่จะสร้างฟังก์ชันการทำงานทั้งหมดไว้ในแกนหลัก Python ถูกออกแบบมาให้สามารถขยายได้ สูง ผ่านโมดูล ความเป็นโมดูลที่กะทัดรัดนี้ทำให้เป็นที่นิยมอย่างมากในฐานะวิธีการเพิ่มอินเทอร์เฟซที่ตั้งโปรแกรมได้ให้กับแอปพลิเคชันที่มีอยู่ วิสัยทัศน์ของ Van Rossum เกี่ยวกับภาษาหลักขนาดเล็กที่มีไลบรารีมาตรฐานขนาดใหญ่และตัวแปลที่ขยายได้ง่ายนั้นเกิดจากความไม่พอใจของเขากับ ABC ซึ่งแสดงถึงแนวทางตรงกันข้าม[ 11 ]
Python อ้างว่ามุ่งมั่นที่จะใช้ไวยากรณ์และ โครงสร้าง ไวยากรณ์ ที่เรียบง่ายและไม่ซับซ้อนในขณะเดียวกันก็ให้นักพัฒนาสามารถเลือกวิธีการเขียนโค้ดได้ Python ไม่มีdo .. whileลูปซึ่งRossumมองว่าเป็นอันตราย[ 76 ]ตรงกันข้ามกับคติพจน์ของPerl ที่ว่า " มีมากกว่าหนึ่งวิธีที่จะทำ " Python สนับสนุนแนวทางที่ว่า "ควรมีหนึ่งวิธี – และควรมีเพียงวิธีเดียว – ที่ชัดเจนในการทำ" [ 71 ]อย่างไรก็ตาม ในทางปฏิบัติ Python มีหลายวิธีในการบรรลุเป้าหมายที่กำหนด มีอย่างน้อยสามวิธีในการจัดรูปแบบสตริงลิเทอรัล โดยไม่มีความแน่นอนว่าโปรแกรมเมอร์ควรใช้วิธีใด[ 77 ] Alex Martelliเป็นสมาชิกของPython Software Foundationและเป็นผู้เขียนหนังสือเกี่ยวกับ Python เขาเขียนว่า "การอธิบายบางสิ่งว่าเป็น 'ฉลาด' ไม่ถือว่าเป็นคำชมในวัฒนธรรม Python" [ 78 ]
โดยทั่วไปนักพัฒนา Python มักให้ความสำคัญกับความอ่านง่ายมากกว่าประสิทธิภาพ ตัวอย่างเช่น พวกเขาปฏิเสธแพตช์สำหรับส่วนที่ไม่สำคัญของCPython reference implementation ที่จะเพิ่มความเร็วที่ไม่คุ้มค่ากับต้นทุนด้านความชัดเจนและความอ่านง่าย[ 79 ]ความเร็วในการทำงานสามารถปรับปรุงได้โดยการย้ายฟังก์ชันที่สำคัญต่อความเร็วไปยังโมดูลส่วนขยายที่เขียนด้วยภาษาต่างๆ เช่นCหรือโดยการใช้คอมไพเลอร์แบบ just-in-timeเช่นPyPyนอกจากนี้ยังสามารถแปลงเป็นภาษาอื่นๆ ได้ อย่างไรก็ตาม วิธีการนี้ล้มเหลวในการบรรลุความเร็วที่เพิ่มขึ้นตามที่คาดหวัง เนื่องจาก Python เป็นภาษาแบบไดนามิก มาก หรือมีการคอมไพล์เฉพาะส่วนย่อยที่จำกัดของ Python เท่านั้น (โดยอาจมีการเปลี่ยนแปลงความหมายเล็กน้อย) [ 80 ]
Python ถูกออกแบบมาให้เป็นภาษาที่สนุกสนานในการใช้งาน[ 81 ] : 3 เป้าหมายนี้สะท้อนให้เห็นในชื่อ ซึ่งเป็นการยกย่องกลุ่มตลกชาวอังกฤษMonty Python [ 82 ]และในแนวทางที่สนุกสนานในการสอนและเอกสารอ้างอิงบางส่วน ตัวอย่างเช่น ตัวอย่างโค้ดบางส่วนใช้คำว่า "spam" และ "eggs" (อ้างอิงถึงสเก็ตช์ของ Monty Python ) แทนที่จะใช้คำทั่วไปอย่าง"foo" และ "bar " [ 81 ] [ 83 ]
คำศัพท์ใหม่ที่ใช้กันทั่วไปในชุมชน Python คือpythonicซึ่งมีความหมายหลากหลายที่เกี่ยวข้องกับรูปแบบการเขียนโปรแกรม: โค้ด Pythonic อาจใช้สำนวน Python ได้ดี เป็นธรรมชาติหรือแสดงให้เห็นถึงความคล่องแคล่วในภาษา หรือสอดคล้องกับปรัชญาแบบมินิมัลลิสต์ของ Python และการเน้นความอ่านง่าย[ 84 ]
ข้อเสนอการปรับปรุง
ข้อเสนอการปรับปรุง Python [หมายเหตุ 1 ]เป็นเอกสารการออกแบบสำหรับการให้ข้อมูลแก่ ชุมชน Pythonหรือข้อเสนอสำหรับคุณสมบัติใหม่ใน Python [ 85 ] PEP มีจุดประสงค์เพื่ออธิบายกระบวนการใหม่ใน Python ให้ข้อกำหนดการตั้งชื่อหรือจัดทำเอกสารกระบวนการในภาษา[ 86 ] PEP อยู่ภายใต้การดูแลของสภาอำนวยการ Python [ 86 ]
PEP มี 3 ประเภท ได้แก่PEP ที่เกี่ยวข้องกับมาตรฐาน[หมายเหตุ 2 ] PEP ที่เกี่ยวข้องกับข้อมูล[หมายเหตุ 3 ]และPEP ที่เกี่ยวข้อง กับกระบวนการ[หมายเหตุ 4 ]ซึ่งแต่ละประเภทมีความหมายเฉพาะตัว[ 85 ] [ 87 ] PEP เหล่านี้ได้รับการแนะนำครั้งแรกในปี 2000 โดยได้รับแรงบันดาลใจจาก RfC (คำขอความคิดเห็น) และข้อเสนอการปรับปรุงการออกแบบอื่นๆ[ 87 ] PEP ที่เป็นที่รู้จักมากที่สุด ได้แก่ PEP – 1, PEP – 8, PEP – 20 , PEP – 257 และอื่นๆ[ 87 ]
ไวยากรณ์และความหมาย
Python ถูกออกแบบมาให้เป็นภาษาที่อ่านง่าย รูปแบบการเขียนไม่รกตา และมักใช้คำหลักภาษาอังกฤษแทนเครื่องหมายวรรคตอนในภาษาอื่นๆ ต่างจากภาษาอื่นๆ หลายภาษา Python ไม่ใช้วงเล็บปีกกา ในการแบ่งบล็อก และอนุญาตให้ใช้เครื่องหมายเซมิโคลอนหลังคำสั่งได้ แต่ไม่ค่อยได้ใช้ นอกจากนี้ยังมีข้อยกเว้นทางไวยากรณ์และกรณีพิเศษน้อยกว่าCหรือPascal [ 88 ]
รอยบุ๋ม
Python ใช้ การเยื้อง ด้วยช่องว่างแทนที่จะใช้วงเล็บปีกกาหรือคำหลัก เพื่อกำหนดขอบเขตของบล็อกการเพิ่มการเยื้องจะเกิดขึ้นหลังจากคำสั่งบางอย่าง การลดระดับการเยื้องหมายถึงจุดสิ้นสุดของบล็อกปัจจุบัน[ 89 ]ดังนั้น โครงสร้างภาพของโปรแกรมจึงแสดงถึงโครงสร้างเชิงความหมายได้อย่างถูกต้อง[ 90 ]คุณลักษณะนี้บางครั้งเรียกว่ากฎนอกด้านภาษาอื่นๆ บางภาษาใช้การเยื้องในลักษณะนี้ แต่ในภาษาส่วนใหญ่ การเยื้องไม่มีความหมายเชิงความหมาย ขนาดการเยื้องที่แนะนำคือสี่ช่องว่าง[ 91 ]
คำสั่งและการควบคุมการไหลของโปรแกรม
คำสั่งต่างๆในภาษา Python ประกอบด้วยสิ่งต่อไปนี้:
- คำสั่งกำหนดค่าโดยใช้เครื่องหมายเท่ากับตัวเดียว
= - คำ
ifสั่งที่เรียกใช้บล็อกโค้ดแบบมีเงื่อนไข พร้อมด้วยคำว่า "elseและ"elif(ซึ่งเป็นคำย่อของelse if")" - คำสั่ง นี้
forจะวนซ้ำไปเรื่อยๆ ใน อ็อบเจ็กต์ ที่สามารถวนซ้ำได้โดยจะเก็บแต่ละองค์ประกอบไว้ในตัวแปรเพื่อใช้ในบล็อกที่แนบมา ตัวแปรนี้จะไม่ถูกลบเมื่อลูปสิ้นสุดลง - คำสั่ง นี้
whileจะเรียกใช้บล็อกโค้ดตราบใดที่เงื่อนไขบูลีนเป็นจริง - คำ
tryสั่งดังกล่าวอนุญาตให้จับและจัดการข้อยกเว้นที่เกิดขึ้นในบล็อกโค้ดที่แนบมาโดยใช้exceptข้อความ (หรือไวยากรณ์ใหม่except*ใน Python 3.11 สำหรับกลุ่มข้อยกเว้น) [ 92 ] คำสั่ง นี้tryยังรับประกันว่าโค้ดทำความสะอาดในfinallyบล็อกจะทำงานเสมอโดยไม่คำนึงถึงวิธีการสิ้นสุดของบล็อก - คำสั่ง นี้
raiseใช้เพื่อแจ้งข้อผิดพลาดที่ระบุไว้ หรือแจ้งข้อผิดพลาดที่ตรวจพบซ้ำอีกครั้ง - คำสั่ง นี้
classซึ่งทำหน้าที่เรียกใช้บล็อกโค้ดและเชื่อมโยงเนมสเปซเฉพาะที่เข้ากับคลาสใช้สำหรับการเขียนโปรแกรมเชิงวัตถุ - คำ
defสั่งที่กำหนดฟังก์ชันหรือวิธีการ - คำ
withสั่งซึ่งล้อมรอบบล็อกโค้ดไว้ภายในตัวจัดการบริบท ทำให้เกิด พฤติกรรมคล้ายการได้ มาซึ่งทรัพยากรคือการเริ่มต้น (RAII) และแทนที่สำนวน try/finally ทั่วไป[ 93 ]ตัวอย่างของบริบท ได้แก่ การได้มาซึ่งล็อกก่อนที่จะรันโค้ดบางส่วน แล้วจึงปล่อยล็อก หรือการเปิดและปิดไฟล์ - คำ
breakสั่งที่ออกจากลูป - คำ
continueสั่งดังกล่าวจะข้ามส่วนที่เหลือของการวนซ้ำในปัจจุบันและดำเนินการต่อในขั้นตอนถัดไป - คำ
delสั่งที่ลบตัวแปร—โดยลบการอ้างอิงจากชื่อไปยังค่า และทำให้เกิดข้อผิดพลาดหากมีการอ้างอิงถึงตัวแปรก่อนที่จะมีการกำหนดค่าใหม่[ d ] - คำสั่ง นี้
passทำหน้าที่เป็นNOP (กล่าวคือ ไม่มีการดำเนินการใดๆ) ซึ่งเป็นสิ่งที่จำเป็นทางไวยากรณ์ในการสร้างบล็อกโค้ดว่างเปล่า - คำสั่ง นี้
assertใช้ในการดีบั๊กเพื่อตรวจสอบเงื่อนไขที่ควรนำมาใช้ - คำ
yieldสั่งที่ส่งคืนค่าจาก ฟังก์ชัน ตัวสร้าง (และตัวดำเนินการ) ใช้ในการสร้างโครูทีน - คำสั่ง นี้
returnใช้สำหรับส่งค่ากลับจากฟังก์ชัน - คำ สั่ง
import`and`fromใช้สำหรับนำเข้าโมดูลที่มีฟังก์ชันหรือตัวแปรที่สามารถใช้ในโปรแกรมปัจจุบันได้ Python 3.15 เพิ่มฟังก์ชันใหม่ในการนำเข้าแบบเลซี่ด้วยคีย์เวิร์ดใหม่: "lazyคีย์เวิร์ดนี้ใช้ได้กับทั้ง คำสั่ง `importand` และ `from ... importor`" [ 94 ] - คำ สั่ง
match`and`caseคล้ายกับ โครงสร้าง คำสั่ง `switch`ซึ่งใช้เปรียบเทียบนิพจน์กับกรณีต่างๆ ตั้งแต่หนึ่งกรณีขึ้นไป เพื่อควบคุมการไหลของโปรแกรม
คำสั่งกำหนดค่า ( =) จะผูกชื่อเป็นตัวอ้างอิง กับ อ็อบเจ็กต์ที่จัดสรรแบบไดนามิกแยกต่างหากตัวแปรสามารถถูกผูกใหม่กับอ็อบเจ็กต์ใดก็ได้ในภายหลังได้ตลอดเวลา ใน Python ชื่อตัวแปรเป็นตัวเก็บอ้างอิงทั่วไปที่ไม่มีชนิดข้อมูล ที่ตายตัว อย่างไรก็ตาม มันจะอ้างอิงถึงอ็อบเจ็กต์ที่มีชนิดข้อมูลเสมอนี่เรียกว่าการกำหนดชนิดข้อมูลแบบไดนามิกซึ่งแตกต่างจาก ภาษา ที่มีการกำหนดชนิดข้อมูล แบบคง ที่ ที่แต่ละตัวแปรสามารถมีได้เฉพาะค่าของชนิดข้อมูลที่กำหนดเท่านั้น
Python ไม่รองรับ การเพิ่มประสิทธิภาพ การเรียกแบบ tail callหรือcontinuations ระดับแรกตามที่ Van Rossum กล่าว ภาษา Python จะไม่มีวันรองรับสิ่งเหล่านี้[ 95 ] [ 96 ]อย่างไรก็ตามการขยาย generator ของ Python ช่วยให้รองรับฟังก์ชันการทำงานแบบcoroutine ได้ดียิ่งขึ้น [ 97 ]ก่อนเวอร์ชัน 2.5 generator เป็นตัววนซ้ำ แบบ lazy โดยข้อมูลจะถูกส่งออกไปจาก generator ในทิศทางเดียว ตั้งแต่ Python 2.5 เป็นต้นไป สามารถส่งข้อมูลกลับเข้าไปในฟังก์ชัน generator ได้ และตั้งแต่เวอร์ชัน 3.3 เป็นต้นไป สามารถส่งข้อมูลผ่าน stack หลายระดับได้[ 98 ]
การแสดงออก
นิพจน์ในภาษา Python ประกอบด้วยสิ่งต่อไปนี้:
- ตัว ดำเนินการ
+,-, และ*สำหรับการบวก การลบ และการคูณทางคณิตศาสตร์นั้นคล้ายกับภาษาอื่นๆ แต่พฤติกรรมของการหารจะแตกต่างกัน มีการหารสองประเภทใน Python ได้แก่การหารแบบปัดเศษลง (หรือการหารจำนวนเต็ม)//และการหารแบบจุดลอยตัว/[ 99 ] Pythonใช้**ตัวดำเนินการ สำหรับการยกกำลัง +ภาษาPython ใช้ ตัวดำเนินการ `concatenation` สำหรับการเชื่อมต่อสตริง และใช้*ตัวดำเนินการ `reproduce` สำหรับการทำซ้ำสตริงตามจำนวนครั้งที่กำหนด- ตัว
@ดำเนินการอินฟิกซ์มีจุดประสงค์เพื่อใช้โดยไลบรารีต่างๆ เช่นNumPyสำหรับการคูณเมทริกซ์[ 100 ] [ 101 ] - ไวยากรณ์
:=ที่เรียกว่า "ตัวดำเนินการ walrus " ถูกนำมาใช้ใน Python 3.8 ตัวดำเนินการนี้กำหนดค่าให้กับตัวแปรเป็นส่วนหนึ่งของนิพจน์ที่ใหญ่กว่า [ 102 ] - ใน Python จะ ใช้
==การเปรียบเทียบค่าของอ็อบเจ็กต์สองตัว ตัวดำเนินการ `value` ของ Pythonisสามารถใช้เพื่อเปรียบเทียบเอกลักษณ์ของอ็อบเจ็กต์ (เช่น การเปรียบเทียบโดยอ้างอิง) และสามารถเชื่อมโยงการเปรียบเทียบได้ เช่น ` value`a<=b<=c - Python ใช้
and,or, และnotเป็นตัวดำเนินการบูลีน - Python มีนิพจน์ประเภทหนึ่งที่เรียกว่าlist comprehensionและนิพจน์ทั่วไปที่เรียกว่าgenerator expression [ 69 ]
- ฟังก์ชันนิรนามถูกนำไปใช้โดยใช้แลมบ์ดาเอ็กซ์เพรสชันอย่างไรก็ตาม ในแต่ละส่วนจะมีได้เพียงหนึ่งเอ็กซ์เพรสชันเท่านั้น
- นิพจน์เงื่อนไขเขียนเป็น. [ 103 ] (ซึ่งแตกต่างจากลำดับตัวดำเนินการทั่วไปในภาษาอื่นๆ อีกมากมาย)
xifcelseyc ? x : y - Python แยกความแตกต่างระหว่างลิสต์และทูเพิลลิสต์เขียนเป็น `list` สามารถเปลี่ยนแปลงได้ และไม่สามารถใช้เป็นคีย์ของพจนานุกรมได้ (เนื่องจากคีย์ของพจนานุกรมใน Python ต้องเปลี่ยนแปลงไม่ได้ ) ทูเพิลเขียนเป็น `tuple` ไม่สามารถเปลี่ยนแปลงได้ ดังนั้นจึงสามารถใช้เป็นคีย์ของพจนานุกรมได้ โดยมีเงื่อนไขว่าองค์ประกอบทั้งหมดของทูเพิลนั้นต้องเปลี่ยนแปลงไม่ได้ ตัวดำเนินการ `concatenate` สามารถใช้เพื่อเชื่อมต่อทูเพิลสองตัว ซึ่งจะไม่แก้ไขเนื้อหาโดยตรง แต่จะสร้างทูเพิลใหม่ที่มีองค์ประกอบของทั้งสอง ตัวอย่างเช่น เมื่อตัวแปร `null` มีค่าเริ่มต้นเท่ากับ `null` การดำเนินการ `concatenate` จะ ประเมิน `null` ก่อนซึ่งจะได้ผลลัพธ์เป็น `null` จากนั้นผลลัพธ์นี้จะถูกกำหนดกลับไปยัง`null` ซึ่งเป็นการ "แก้ไขเนื้อหา" ของ `null` อย่างมีประสิทธิภาพในขณะที่ยังคงสอดคล้องกับลักษณะที่เปลี่ยนแปลงไม่ได้ของออบเจ็กต์ทูเพิล วงเล็บเป็นตัวเลือกสำหรับทูเพิลในบริบทที่ไม่กำกวม[ 104 ]
[1,2,3](1,2,3)+t(1,2,3)t=t+(4,5)t+(4,5)(1,2,3,4,5)tt - Python มีคุณสมบัติการแยกส่วนลำดับ (sequence unpacking)โดยที่นิพจน์หลายรายการ ซึ่งแต่ละรายการจะประเมินค่าเป็นค่าที่กำหนดได้ (เช่น ตัวแปรหรือคุณสมบัติที่เขียนได้) จะถูกเชื่อมโยงเข้าด้วยกันเช่นเดียวกับการสร้างตัวอักษรทูเปิล โดยรวมแล้ว ผลลัพธ์จะถูกวางไว้ทางด้านซ้ายของเครื่องหมายเท่ากับในคำสั่งกำหนดค่า คำสั่งนี้คาดหวังว่า ออบเจ็กต์ที่วน ซ้ำได้ทางด้านขวาของเครื่องหมายเท่ากับจะสร้างค่าจำนวนเท่ากับนิพจน์ที่เขียนได้ทางด้านซ้าย ในระหว่างการวนซ้ำ คำสั่งจะกำหนดค่าแต่ละค่าที่สร้างขึ้นทางด้านขวาให้กับนิพจน์ที่สอดคล้องกันทางด้านซ้าย[ 105 ]
- Python มีตัวดำเนินการ "จัดรูปแบบสตริง"
%ที่ทำงานคล้ายกับprintfการจัดรูปแบบสตริงในภาษา C เช่นประเมินค่าเป็นใน Python 2.6+ และ 3+ ตัวดำเนินการนี้ได้รับการเสริมด้วยเมธอดของคลาส เช่นPython 3.6 เพิ่ม "f-strings" : [ 106 ]"spam=%s eggs=%d"%("blah",2)"spam=blah eggs=2"format()str"spam={0} eggs={1}".format("blah",2)spam="blah";eggs=2;f'spam={spam} eggs={eggs}' - ใน Python สามารถต่อ สตริงได้ โดยการ "บวก" สตริงเหล่านั้น (โดยใช้ตัวดำเนินการเดียวกับการบวกจำนวนเต็มและจำนวนทศนิยม) เช่นจะคืนค่าถ้าสตริงมีตัวเลข ตัวเลขเหล่านั้นจะถูกต่อกันเป็นสตริงแทนที่จะเป็นจำนวนเต็ม เช่นจะคืนค่า.
"spam"+"eggs""spameggs""2"+"2""22" - Python รองรับสตริงลิเทอรัลได้หลายวิธี:
- คั่นด้วยเครื่องหมายอัญประกาศเดี่ยวหรือคู่ เครื่องหมายอัญประกาศเดี่ยวและคู่มีฟังก์ชันการทำงานที่เทียบเท่ากัน (ต่างจากในเชลล์ Unix , Perlและภาษาที่ได้รับอิทธิพลจาก Perl) เครื่องหมายทั้งสองใช้เครื่องหมายแบ็กสแลช (
\) เป็นอักขระหลีกการแทรกสตริงมีให้ใช้งานใน Python 3.6 ในรูปแบบ "สตริงลิเทอรัลที่จัดรูปแบบ" [ 106 ] - เครื่องหมายอัญประกาศสามตัว หมายถึง การเริ่มต้นและสิ้นสุดด้วยเครื่องหมายอัญประกาศเดี่ยวหรือคู่สามตัว ซึ่งอาจครอบคลุมหลายบรรทัดและทำงานเหมือนเอกสาร hereในเชลล์ ภาษา Perl และภาษาRuby
- สตริง แบบดิบ (Raw string ) ระบุโดยการใส่เครื่องหมายแบ็กสแลช (\) ไว้ข้าง หน้าสตริง ลำดับการหลีกเลี่ยง (
rEscape sequence) จะไม่ถูกตีความ ดังนั้นสตริงแบบดิบจึงมีประโยชน์ในกรณีที่ใช้เครื่องหมายแบ็กสแลชทั่วไป เช่น ในนิพจน์ปกติ (Regular expression ) และ เส้นทางแบบ Windows (เปรียบเทียบกับการใช้ "@quoting" ในC# )
- คั่นด้วยเครื่องหมายอัญประกาศเดี่ยวหรือคู่ เครื่องหมายอัญประกาศเดี่ยวและคู่มีฟังก์ชันการทำงานที่เทียบเท่ากัน (ต่างจากในเชลล์ Unix , Perlและภาษาที่ได้รับอิทธิพลจาก Perl) เครื่องหมายทั้งสองใช้เครื่องหมายแบ็กสแลช (
- Python มี การกำหนด ดัชนีอาร์เรย์และ การ แบ่งส่วนอาร์เรย์ในลิสต์ ซึ่งเขียนในรูปแบบ
a[key]ลิ สต์ โดยดัชนีจะเริ่มต้นที่ศูนย์และดัชนีติดลบจะสัมพันธ์กับจุดสิ้นสุด การแบ่งส่วนจะเลือกองค์ประกอบตั้งแต่ ดัชนี เริ่มต้นจนถึงดัชนีสิ้นสุด แต่ไม่รวม ดัชนี สิ้นสุดพารามิเตอร์การแบ่งส่วนที่สาม (ซึ่งเป็นตัวเลือก) เรียกว่าstepหรือstrideจะช่วยให้สามารถข้ามหรือกลับลำดับขององค์ประกอบได้ สามารถละเว้นดัชนีการแบ่งส่วนได้ เช่น `foreach` จะคืนค่าสำเนาของลิสต์ทั้งหมด องค์ประกอบแต่ละตัวในการแบ่งส่วนเป็นสำเนาแบบตื้นa[start:stop]a[start:stop:step]a[:]
ในภาษา Python มีการบังคับใช้ความแตกต่างระหว่างนิพจน์และคำสั่งอย่างเคร่งครัด ซึ่งแตกต่างจากภาษาอื่นๆ เช่นCommon Lisp , SchemeหรือRubyความแตกต่างนี้ทำให้เกิดการทำงานซ้ำซ้อนในบางเรื่อง ตัวอย่างเช่น:
- List comprehensionsกับ
for-loops - นิพจน์เงื่อนไข
ifเทียบกับ บล็อก - ฟังก์ชัน
eval()แบบ แรกexec()ใช้execสำหรับนิพจน์ ในขณะที่ฟังก์ชันแบบหลังใช้สำหรับคำสั่ง
คำสั่งไม่สามารถเป็นส่วนหนึ่งของนิพจน์ได้ เนื่องจากข้อจำกัดนี้ นิพจน์ต่างๆ เช่น รายการและdictนิพจน์แบบเข้าใจได้ (และนิพจน์แลมบ์ดา) จึงไม่สามารถมีคำสั่งอยู่ภายในได้ ในกรณีพิเศษ คำสั่งกำหนดค่า เช่นไม่สามารถเป็นส่วนหนึ่งของนิพจน์เงื่อนไขของคำสั่งเงื่อนไขได้ a=1
กำลังพิมพ์

Python ใช้ การกำหนดประเภท แบบเป็ด (duck typing ) โดยมีอ็อบเจ็กต์ที่มีประเภท แต่ชื่อตัวแปรไม่มีประเภท การตรวจสอบข้อจำกัดของประเภทจะไม่เกิดขึ้นในขณะที่กำหนดอ็อบเจ็กต์ แต่การดำเนินการกับอ็อบเจ็กต์อาจล้มเหลวในขณะที่ใช้งาน ซึ่งบ่งชี้ว่าอ็อบเจ็กต์นั้นไม่ใช่ประเภทที่เหมาะสม แม้ว่าจะเป็นภาษาที่มีการกำหนดประเภทแบบไดนามิกแต่ Python ก็เป็นภาษาที่มีการกำหนดประเภทอย่างเข้มงวดโดยห้ามการดำเนินการที่กำหนดไว้ไม่ชัดเจน (เช่น การบวกตัวเลขกับสตริง) แทนที่จะพยายามตีความการดำเนินการเหล่านั้นอย่างเงียบๆ
Python อนุญาตให้นักเขียนโปรแกรมกำหนดประเภทข้อมูลของตนเองโดยใช้คลาสซึ่งส่วนใหญ่ใช้สำหรับการเขียนโปรแกรมเชิงวัตถุ การสร้างอิน สแตนซ์ใหม่ของคลาสทำได้โดยการเรียกใช้คลาส เช่นหรือ); คลาสเหล่านี้เป็นอินสแตนซ์ของเมตาคลาส (ซึ่งเป็นอินสแตนซ์ของตัวมันเอง) จึงทำให้สามารถเขียนโปรแกรมแบบเมตาและสะท้อนกลับได้ SpamClass()EggsClass()type
ก่อนเวอร์ชัน 3.0 Python มีคลาสสองประเภท โดยทั้งสองประเภทใช้ไวยากรณ์เดียวกัน คือแบบเก่าและแบบใหม่[ 107 ] Python เวอร์ชันปัจจุบันรองรับความหมายของแบบใหม่เท่านั้น
Python รองรับ การ ระบุประเภทแบบเลือกได้[ 5 ] [ 108 ]ภาษาไม่ได้บังคับใช้การระบุประเภทเหล่านี้ แต่เครื่องมือภายนอก เช่นmypy อาจใช้ เพื่อตรวจจับข้อผิดพลาด Python มีโมดูลtypingที่ประกอบด้วยชื่อประเภทหลายชื่อสำหรับการระบุประเภท[ 109 ] [ 110 ]นอกจากนี้ mypy ยังรองรับคอมไพเลอร์ Python ที่เรียกว่า mypyc ซึ่งใช้การระบุประเภทเพื่อเพิ่มประสิทธิภาพ[ 111 ]
| พิมพ์ | ความเปลี่ยนแปลง | คำอธิบาย | ตัวอย่างไวยากรณ์ |
|---|---|---|---|
bool | ไม่เปลี่ยนแปลง | ค่าบูลีน | TrueFalse |
bytearray | เปลี่ยนแปลงได้ | ลำดับของไบต์ | bytearray(b'Some ASCII')bytearray(b"Some ASCII")bytearray([119,105,107,105]) |
bytes | ไม่เปลี่ยนแปลง | ลำดับของไบต์ | b'Some ASCII'b"Some ASCII"bytes([119,105,107,105]) |
complex | ไม่เปลี่ยนแปลง | จำนวนเชิงซ้อนที่มีส่วนจริงและส่วนจินตนาการ | 3+2.7j3+2.7j5j |
dict | เปลี่ยนแปลงได้ | อาร์เรย์แบบเชื่อมโยง (หรือพจนานุกรม) ของคู่คีย์และค่า สามารถมีชนิดข้อมูลผสม (คีย์และค่า) ได้ โดยคีย์ต้องเป็นชนิดข้อมูลที่สามารถแฮชได้ | {'key1':1.0,3:False}{} |
types.EllipsisType | ไม่เปลี่ยนแปลง | สัญลักษณ์ จุด ไข่ปลา (ellipsis)ใช้เป็นดัชนีในอาร์เรย์ NumPy | ...Ellipsis |
float | ไม่เปลี่ยนแปลง | เลขทศนิยมแบบdouble-precision 64 บิต( เลข IEEE 754ที่มีความแม่นยำ 53 บิต ในทุกเวอร์ชันที่รองรับตั้งแต่ CPython 3.11; [ 112 ]ในทางปฏิบัติยังอยู่ในเวอร์ชัน 3.10 และเก่ากว่า แม้ว่าในทางเทคนิคแล้วความแม่นยำจะขึ้นอยู่กับเครื่อง[ 113 ] )ประเภทข้อมูลในตัวของ Python รองรับทั้งเลข double 64 บิตและเลข float 32 บิต และโมดูลไลบรารีมาตรฐานของ Python ยังรองรับเลข half-float 16 บิตเพิ่มเติม แพ็กเกจ Python เช่น NumPy และ Pandas อาจรองรับเลข float 32 บิตหรือมากกว่านั้น เช่น; แม้ว่าการสนับสนุนเลข half-float มักจะไม่สมบูรณ์หรือไม่ปรากฏอยู่ในแพ็กเกจส่วนใหญ่[ 114 ] เลข bfloat 16 บิตได้รับการสนับสนุนในบางแพ็กเกจ[ 115 ]memoryviewstructnumpy.halfโดยทั่วไปแล้ว การใช้งาน Python ส่วนใหญ่จะรองรับชนิดข้อมูล double แต่การใช้งานบางอย่างที่ไม่ธรรมดา (เช่นMicroPythonสำหรับการเขียนโปรแกรมฝังตัว ) จะรองรับ float 32 บิต IEEE เป็นค่าเริ่มต้น ผู้ใช้สามารถเลือกใช้ 64 บิตได้โดยการตั้งค่า MICROPY_FLOAT_IMPL เป็น MICROPY_FLOAT_IMPL_DOUBLE |
|
frozenset | ไม่เปลี่ยนแปลง | เซตที่ไม่มีลำดับไม่มีข้อมูลซ้ำกัน สามารถมีข้อมูลหลายประเภทผสมกันได้ หากสามารถสร้างแฮชได้ | frozenset({4.0,'string',True})
|
int | ไม่เปลี่ยนแปลง | จำนวนเต็มที่มีขนาดไม่จำกัด[ 116 ] (เช่น ไม่ใช้จำนวนเต็มของเครื่อง เช่น แพ็กเกจ NumPy ของ Python ใช้จำนวนเต็มที่มีขนาดคงที่เพื่อเพิ่มความเร็ว (และอนุญาตให้มีขนาดต่างกัน) เช่น ประเภทnumpy.byteและnumpy.ulonglongประเภทดังกล่าวทั้งหมดมีความเป็นไปได้ที่จะเกิดการวนรอบ แม้ว่าจะมีโอกาสน้อยลงเมื่อมีขนาดใหญ่ขึ้น) | 42 |
list | เปลี่ยนแปลงได้ | รายการสามารถประกอบด้วยประเภทข้อมูลที่หลากหลาย | [4.0,'string',True][] |
types.NoneType | ไม่เปลี่ยนแปลง | อ็อบเจ็กต์ที่แสดงถึงการไม่มีค่า ซึ่งมักเรียกว่าnullในภาษาโปรแกรมอื่นๆ | None |
types.NotImplementedType | ไม่เปลี่ยนแปลง | ตัวแทนที่สามารถส่งคืนจากตัวดำเนินการที่มีการโอเวอร์โหลดเพื่อระบุประเภทตัวถูกดำเนินการที่ไม่รองรับ | NotImplemented |
range | ไม่เปลี่ยนแปลง | ลำดับ ตัวเลข ที่ไม่เปลี่ยนแปลงซึ่งมักใช้สำหรับการวนซ้ำจำนวนครั้งที่กำหนดในforลูป[ 117 ] | range(−1,10)range(10,−5,−2) |
set | เปลี่ยนแปลงได้ | เซตที่ไม่มีลำดับไม่มีข้อมูลซ้ำกัน สามารถมีข้อมูลหลายประเภทผสมกันได้ หากสามารถสร้างแฮชได้ | {4.0,'string',True}set() |
str | ไม่เปลี่ยนแปลง | สตริงอักขระ : ลำดับของรหัสยูนิโค้ด | 'Wikipedia'"Wikipedia""""ครอบคลุมหลายบรรทัด""" |
tuple | ไม่เปลี่ยนแปลง | ทูเพิล (Tuple ) สามารถมีชนิดข้อมูลผสมกันได้ | (4.0,'string',True)('single element',)() |
การดำเนินการทางคณิตศาสตร์
Python มีสัญลักษณ์ทั่วไปสำหรับตัวดำเนินการทางคณิตศาสตร์ ( +, -, *, /) ตัวดำเนินการหารพื้น//และตัวดำเนินการโมดูลัส% (ด้วยตัวดำเนินการโมดูลัส เศษเหลือสามารถเป็นลบได้ เช่น4 % -3 == -2) Python ยังมี**สัญลักษณ์สำหรับการยกกำลังเช่น5**3 == 125และ9**0.5 == 3.0รวมถึงตัวดำเนินการคูณเมทริกซ์@[ 118 ] ตัว ดำเนินการเหล่านี้ทำงานเหมือนในคณิตศาสตร์แบบดั้งเดิม ด้วย กฎลำดับความสำคัญเดียวกันตัวดำเนินการอินฟิกซ์+และ-ยังสามารถเป็นตัว ดำเนินการเอกภาค เพื่อแสดงจำนวนบวกและลบตามลำดับ
การหารระหว่างจำนวนเต็มจะให้ผลลัพธ์เป็นจำนวนทศนิยม พฤติกรรมของการหารมีการเปลี่ยนแปลงอย่างมากเมื่อเวลาผ่านไป: [ 119 ]
- Python เวอร์ชันปัจจุบัน (เช่น ตั้งแต่เวอร์ชัน 3.0 เป็นต้นไป) ได้เปลี่ยนตัว
/ดำเนินการให้แทนการหารเลขทศนิยมเสมอ เช่น.5/2==2.5 //มีการแนะนำตัวดำเนินการหารพื้น ซึ่งหมายความว่า7//3 == 2,-7//3 == -3,7.5//3 == 2.0, และ-7.5//3 == -3.0สำหรับ Python 2.7 การเพิ่มคำสั่ง จะทำให้โมดูลใน Python 2.7 สามารถใช้กฎการหารของ Python 3.x ได้ (ดูด้านบน)from__future__importdivision
ในแง่ของ Python /ตัวดำเนินการ แทนการหารจริง (หรือเรียกง่ายๆ ว่าการหาร ) ในขณะที่//ตัวดำเนินการ แทนการหารแบบปัดเศษลงก่อนเวอร์ชัน 3.0 /ตัวดำเนินการ แทนการหารแบบคลาสสิก[ 119 ]
การปัดเศษเข้าหาค่าลบอนันต์ แม้จะเป็นวิธีการที่แตกต่างจากภาษาโปรแกรมส่วนใหญ่ แต่ก็ช่วยเพิ่มความสอดคล้องให้กับ Python ตัวอย่างเช่น การปัดเศษนี้หมายความว่าสมการจะเป็นจริงเสมอ นอกจากนี้ การปัดเศษยังหมายความว่าสมการจะใช้ได้สำหรับทั้งค่าบวกและค่าลบของตามที่คาดไว้ ผลลัพธ์ของจะอยู่ในช่วงครึ่งเปิด [0, b ) โดยที่เป็นจำนวนเต็มบวก อย่างไรก็ตาม การรักษาความถูกต้องของสมการจำเป็นต้องให้ผลลัพธ์อยู่ในช่วง ( b , 0] เมื่อเป็นค่าลบ[ 120 ](a+b)//b==a//b+1b*(a//b)+a%b==aaa%bbb
Python มีroundฟังก์ชันสำหรับปัดเศษทศนิยมให้เป็นจำนวนเต็มที่ใกล้ที่สุด สำหรับการแก้ปัญหาการเสมอกัน Python 3 ใช้เมธอด round to even : round(1.5)และround(2.5)ทั้งสองแบบให้ผลลัพธ์เป็น2. [ 121 ] Python เวอร์ชันก่อน 3 ใช้ เมธอด round-away-from-zero : round(0.5)คือ1.0และround(-0.5)คือ−1.0. [ 122 ]
Python อนุญาตให้ใช้นิพจน์บูลีนที่มีความสัมพันธ์ความเท่าเทียมกันหลายรายการเพื่อให้สอดคล้องกับการใช้งานทั่วไปในคณิตศาสตร์ ตัวอย่างเช่น นิพจน์a < b < cจะทดสอบว่าaน้อยกว่าbและbน้อยกว่า หรือไม่c[ 123 ] ภาษาที่พัฒนามาจาก C จะตีความนิพจน์นี้แตกต่างกัน ใน C นิพจน์จะประเมินค่า ก่อน ซึ่งจะได้ผลลัพธ์เป็น 0 หรือ 1 จาก นั้นa < bผลลัพธ์นั้นจะถูกเปรียบเทียบกับc[ 124 ]
Python ใช้เลขคณิตที่มีความแม่นยำตามอำเภอใจสำหรับการดำเนินการจำนวนเต็มทั้งหมดDecimalประเภท/คลาสในdecimalโมดูลนี้ให้ตัวเลขทศลอยที่มีความแม่นยำตามอำเภอใจที่กำหนดไว้ล่วงหน้าพร้อมโหมดการปัดเศษหลายแบบ[ 125 ]คลาสFractionในfractionsโมดูลนี้ให้ความแม่นยำตามอำเภอใจสำหรับจำนวนตรรกยะ[ 126 ]
เนื่องจากไลบรารีทางคณิตศาสตร์ที่ครอบคลุมของ Python และไลบรารีของบุคคลที่สามNumPyภาษาจึงถูกใช้บ่อยสำหรับการเขียนสคริปต์ทางวิทยาศาสตร์ในงานต่างๆ เช่น การประมวลผลและการจัดการข้อมูลเชิงตัวเลข[ 127 ] [ 128 ]
ไวยากรณ์ฟังก์ชัน
ฟังก์ชันใน Python สร้างขึ้นโดยใช้defคีย์เวิร์ด `function` การกำหนดฟังก์ชันนั้นคล้ายกับการเรียกใช้ฟังก์ชัน โดยต้องระบุชื่อฟังก์ชันก่อน แล้วจึงระบุพารามิเตอร์ที่จำเป็น นี่คือตัวอย่างของฟังก์ชันที่พิมพ์ค่าที่ป้อนเข้ามา:
def printer ( input1 , input2 = "already there" ): print ( input1 ) print ( input2 )เครื่องพิมพ์( "สวัสดี" )# ตัวอย่างผลลัพธ์: # สวัสดี# อยู่ที่นั่นแล้วหากต้องการกำหนดค่าเริ่มต้นให้กับพารามิเตอร์ของฟังก์ชัน ในกรณีที่ไม่มีการระบุค่าจริงในระหว่างการทำงาน สามารถใช้ไวยากรณ์การกำหนดค่าตัวแปรภายในส่วนหัวของฟังก์ชันได้
ตัวอย่างโค้ด
พิมพ์( 'สวัสดีโลก!' )โปรแกรมสำหรับคำนวณแฟกทอเรียลของจำนวนเต็มที่ไม่เป็นลบ:
text = input ( 'พิมพ์ตัวเลข แล้วค่าแฟกทอเรียลของตัวเลขนั้นจะถูกพิมพ์ออกมา: ' )n = int ( ข้อความ)ถ้าn < 0 :raise ValueError ( 'คุณต้องป้อนจำนวนเต็มที่ไม่ติดลบ' )แฟกทอเรียล= 1สำหรับi ในช่วง( 2 , n + 1 ):แฟกทอเรียล*= iพิมพ์( แฟกทอเรียล)ห้องสมุด
ไลบรารีมาตรฐานขนาดใหญ่ของ Python [ 129 ]มักถูกอ้างถึงว่าเป็นจุดแข็งที่สำคัญที่สุดอย่างหนึ่ง สำหรับแอปพลิเคชันที่เชื่อมต่อกับอินเทอร์เน็ต รูปแบบและโปรโตคอลมาตรฐานมากมาย เช่นMIMEและHTTPได้รับการสนับสนุน ภาษาประกอบด้วยโมดูลสำหรับการสร้างอินเทอร์เฟซผู้ใช้แบบกราฟิกการเชื่อมต่อกับฐานข้อมูลเชิงสัมพันธ์การสร้างตัวเลขสุ่มเทียมการคำนวณเลขคณิตด้วยทศนิยมที่มีความแม่นยำตามอำเภอใจ[ 125 ]การจัดการนิพจน์ปกติและ การ ทดสอบ หน่วย
บางส่วนของไลบรารีมาตรฐานนั้นครอบคลุมโดยข้อกำหนด—ตัวอย่างเช่น การใช้งาน Web Server Gateway Interface (WSGI) wsgirefเป็นไปตาม PEP 333 [ 130 ] —แต่ส่วนใหญ่ระบุโดยโค้ด เอกสารภายใน และชุดทดสอบอย่างไรก็ตาม เนื่องจากไลบรารีมาตรฐานส่วนใหญ่เป็นโค้ด Python ข้ามแพลตฟอร์ม จึงต้องแก้ไขหรือเขียนโมดูลใหม่เพียงไม่กี่โมดูลสำหรับการใช้งานที่แตกต่างกัน
ณ วันที่ 13 มีนาคม พ.ศ. 2568 ดัชนีแพ็กเกจ Python (PyPI) ซึ่งเป็นคลังอย่างเป็นทางการสำหรับซอฟต์แวร์ Python ของบุคคลที่สาม มีแพ็กเกจ มากกว่า 614,339 [ 131 ]
สภาพแวดล้อมการพัฒนา
การใช้งาน Python ส่วนใหญ่ (รวมถึง CPython) มีลูปอ่าน-ประเมิน-พิมพ์ (REPL) ซึ่งช่วยให้สภาพแวดล้อมทำงานเป็นตัวแปลคำสั่งบรรทัดคำสั่งโดยผู้ใช้สามารถป้อนคำสั่งตามลำดับและรับผลลัพธ์ได้ทันที[ 132 ]
นอกจากนี้ CPython ยังมาพร้อมกับสภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE)ที่เรียกว่าIDLE [ 133 ] ซึ่งมุ่งเน้นไปที่ผู้เริ่มต้น
เชลล์อื่นๆ รวมถึงIDLEและIPythonเพิ่มความสามารถเพิ่มเติม เช่น การเติมคำอัตโนมัติที่ดีขึ้น การเก็บรักษาสถานะเซสชัน และการเน้นไวยากรณ์[ 133 ] [ 134 ]
IDE บนเดสก์ท็อปมาตรฐาน ได้แก่PyCharm , SpyderและVisual Studio Code ; [ 135 ]นอกจากนี้ยังมี IDE บน เว็บเบราว์เซอร์เช่น สภาพแวดล้อมต่อไปนี้:
- Jupyter Notebooksแพลตฟอร์มการประมวลผลแบบโต้ตอบโอเพนซอร์ส[ 136 ]
- PythonAnywhereคือ IDE และสภาพแวดล้อมการโฮสต์แบบเว็บเบราว์เซอร์ และ
- Canopy ซึ่งเป็น IDE เชิงพาณิชย์จากEnthoughtที่เน้น การ คำนวณทางวิทยาศาสตร์[ 137 ] [ 138 ]
การนำไปใช้
การใช้งานอ้างอิง
CPythonเป็นการใช้งานอ้างอิงของ Python การใช้งานนี้เขียนด้วยภาษา C ซึ่งตรงตามมาตรฐานC11 [ 139 ]ตั้งแต่เวอร์ชัน 3.11 เวอร์ชันเก่ากว่าใช้ มาตรฐาน C89 พร้อมคุณสมบัติ C99บางส่วนแต่ส่วนขยายของบุคคลที่สามไม่ได้จำกัดเฉพาะเวอร์ชัน C เก่ากว่า เช่น สามารถนำไปใช้โดยใช้ C11 หรือ C++ ได้[ 140 ] [ 141 ] CPython คอมไพล์โปรแกรม Python เป็นไบต์โค้ดระดับกลาง [ 142 ] ซึ่งจะถูกเรียกใช้งานโดยเครื่องเสมือน[ 143 ] CPython แจกจ่ายพร้อมกับไลบรารีมาตรฐานขนาดใหญ่ที่เขียนด้วยภาษา C และ Python ดั้งเดิม
CPython สามารถใช้งานได้บนหลายแพลตฟอร์ม รวมถึง Windows และระบบที่คล้าย Unix สมัยใหม่ส่วนใหญ่ รวมถึง macOS (และ Apple M1 Mac ตั้งแต่ Python 3.9.1 โดยใช้ตัวติดตั้งแบบทดลอง) ตั้งแต่ Python 3.9 เป็นต้นไป ตัวติดตั้ง Python จะไม่ติดตั้งบนWindows 7และ 8 โดย เจตนา [ 144 ] [ 145 ] Windows XPได้รับการสนับสนุนจนถึง Python 3.5 เวอร์ชัน Python เก่าๆ รองรับVMS อย่างไม่เป็นทางการ (ส่วนใหญ่รองรับ[ 146 ] ) และOpenVMS x86-64 รองรับ Python 3.10 [ 147 ] [ 148 ]ความสามารถในการพกพาข้ามแพลตฟอร์มเป็นหนึ่งในลำดับความสำคัญแรกๆ ของ Python [ 149 ]ในระหว่างการพัฒนา Python 1 และ 2 แม้แต่OS/2และSolarisก็ได้รับการสนับสนุน[ 8 ]ตั้งแต่นั้นมา การสนับสนุนสำหรับหลายแพลตฟอร์มก็ถูกยกเลิก
Python เวอร์ชันปัจจุบันทั้งหมด (ตั้งแต่เวอร์ชัน 3.7 เป็นต้นไป) รองรับเฉพาะระบบปฏิบัติการที่มีคุณสมบัติการทำงานแบบมัลติเธรดเท่านั้น ซึ่งปัจจุบันรองรับระบบปฏิบัติการน้อยกว่าในอดีตมาก (โดยได้ตัดระบบปฏิบัติการที่ล้าสมัยออกไปหลายระบบ)
ข้อจำกัดของการใช้งานอ้างอิง
- การใช้พลังงานของ Python กับ CPython สำหรับโค้ดที่เขียนโดยทั่วไปนั้นแย่กว่า C ถึง 75.88 เท่า[ 150 ]
- ประสิทธิภาพการประมวลผลของ Python ด้วย CPython สำหรับโค้ดที่เขียนโดยทั่วไปแย่กว่า C ถึง 71.9 เท่า[ 150 ]
- การใช้หน่วยความจำโดยเฉลี่ยของ CPython สำหรับโค้ดที่เขียนโดยทั่วไปนั้นแย่กว่า C ถึง 2.4 เท่า[ 150 ]
การใช้งานอื่นๆ
การใช้งานทางเลือกทั้งหมดมีลักษณะการทำงานที่แตกต่างกันเล็กน้อย ตัวอย่างเช่น ทางเลือกหนึ่งอาจรวมถึงพจนานุกรมที่ไม่มีลำดับ ซึ่งแตกต่างจาก Python เวอร์ชันอื่นๆ ในปัจจุบัน อีกตัวอย่างหนึ่งในระบบนิเวศของ Python ที่ใหญ่กว่าคือ PyPy ไม่รองรับ API ของ Python ในภาษา C อย่างเต็มรูปแบบ
การสร้างไฟล์ปฏิบัติการด้วย Python มักทำโดยการรวมตัวแปลภาษา Python ทั้งหมดเข้าไปในไฟล์ปฏิบัติการ ซึ่งทำให้ขนาดไบนารีมีขนาดใหญ่มากสำหรับโปรแกรมขนาดเล็ก[ 151 ]แต่ก็มีการใช้งานที่สามารถคอมไพล์ Python ได้อย่างแท้จริง การใช้งานทางเลือกอื่นๆ ได้แก่:
- PyPyเป็นตัวแปลภาษา Python 2.7 และ 3.11 ที่เร็วกว่าและสอดคล้องกัน[ 152 ] [ 153 ]คอมไพเลอร์แบบ just-in-timeของ PyPy มักจะปรับปรุงความเร็วได้อย่างมีนัยสำคัญเมื่อเทียบกับ CPython แต่ PyPy ไม่รองรับไลบรารีบางตัวที่เขียนด้วยภาษา C [ 154 ] PyPy ให้การสนับสนุนสถาปัตยกรรมชุดคำสั่งRISC-V
- Codon เป็นการใช้งานคอมไพเลอร์แบบ AOT (Ahead-of-Time)ซึ่งคอมไพล์ภาษาที่คล้าย Python ที่มีประเภทคงที่ โดย "ไวยากรณ์และความหมายเกือบจะเหมือนกับ Python แต่ก็มีความแตกต่างที่เห็นได้ชัดอยู่บ้าง" [ 155 ]ตัวอย่างเช่น Codon ใช้จำนวนเต็มเครื่อง 64 บิตเพื่อความเร็ว ไม่ใช่โดยพลการเหมือนกับ Python นักพัฒนา Codon อ้างว่าความเร็วที่เพิ่มขึ้นเมื่อเทียบกับ CPython มักจะอยู่ในระดับสิบถึงร้อยเท่า Codon คอมไพล์เป็นรหัสเครื่อง (ผ่านLLVM ) และรองรับมัลติเธรดแบบเนทีฟ[ 156 ] Codon ยังสามารถคอมไพล์เป็นโมดูลส่วนขยาย Python ที่สามารถนำเข้าและใช้งานได้จาก Python
- MicroPythonและCircuitPythonเป็นรูปแบบ Python 3 ที่ได้รับการปรับให้เหมาะสมสำหรับไมโครคอนโทรลเลอร์รวมถึงLego Mindstorms EV3 [ 157 ]
- Pyston เป็นรูปแบบหนึ่งของรันไทม์ Python ที่ใช้การคอมไพล์แบบทันทีเพื่อเร่งความเร็วในการทำงานของโปรแกรม Python [ 158 ]
- Cinder เป็น CPython 3.8 เวอร์ชันที่เน้นประสิทธิภาพ ซึ่งมีการปรับปรุงหลายอย่าง รวมถึงการแคชไบต์โค้ดแบบอินไลน์ การประเมินโครูทีนแบบทันทีJIT แบบทีละเมธอด และคอมไพเลอร์ไบต์โค้ดแบบทดลอง[ 159 ]
- ภาษาประมวลผลแบบฝังตัว Snek [ 160 ] [ 161 ] [ 162 ] "ได้รับแรงบันดาลใจจาก Python แต่ไม่ใช่ Python เป็นไปได้ที่จะเขียนโปรแกรม Snek ที่ทำงานภายใต้ระบบ Python เต็มรูปแบบ แต่โปรแกรม Python ส่วนใหญ่จะไม่ทำงานภายใต้ Snek" [ 163 ] Snek เข้ากันได้กับ ไมโครคอนโทรลเลอร์ AVR 8 บิตเช่น Arduino ที่ใช้ ATmega 328Pรวมถึงไมโครคอนโทรลเลอร์ขนาดใหญ่กว่าที่เข้ากันได้กับMicroPython Snek เป็นภาษาเชิงคำสั่ง (ซึ่งแตกต่างจาก Python) ที่ละเว้นการเขียนโปรแกรมเชิงวัตถุ Snek รองรับเฉพาะชนิดข้อมูลตัวเลขเพียงชนิดเดียว ซึ่งมีความแม่นยำเดี่ยว 32 บิต (คล้ายกับ ตัวเลข JavaScriptแต่เล็กกว่า)
- RustPython เป็นการใช้งานที่เขียนด้วยRust (ภาษาโปรแกรม)โดยมีเป้าหมายเพื่อให้เข้ากันได้กับ CPython รวมถึง C-ABI [ 164 ]ปัจจุบันมีการใช้งานในGrepTimeDBและRuffรวมถึงโครงการอื่นๆ ด้วย
การใช้งานที่ไม่ได้รับการสนับสนุน
Stackless Pythonเป็นการแยกสาขาที่สำคัญของ CPython ที่ใช้ไมโครเธรดการใช้งานนี้ใช้สแต็กการเรียกที่แตกต่างออกไป ทำให้สามารถประมวลผลโปรแกรมพร้อมกันได้จำนวนมาก PyPy ยังมีเวอร์ชัน stackless อีกด้วย[ 165 ]
มีการพัฒนาคอมไพเลอร์ Python แบบ Just-in-time ขึ้นมาแล้ว แต่ปัจจุบันไม่ได้รับการสนับสนุนอีกต่อไป:
- Google เริ่มโครงการชื่อUnladen Swallowในปี 2552 โดยโครงการนี้มีเป้าหมายเพื่อเพิ่มความเร็วของตัวแปลภาษา Python ขึ้นห้าเท่าโดยใช้LLVMและปรับปรุง ความสามารถในการทำงาน แบบมัลติเธรดเพื่อรองรับคอร์จำนวนหลายพันคอร์[ 166 ]ในขณะที่การใช้งานทั่วไปถูกจำกัดด้วย ตัวล็อกตัวแปลภาษา ทั่วโลก
- Psycoเป็นคอมไพเลอร์แบบ just-in-time ที่เลิกใช้งานแล้วซึ่งทำงาน ร่วมกับ CPython และแปลงไบต์โค้ดเป็นโค้ดเครื่องจักรในขณะรันไทม์ โค้ดที่ได้จะถูกปรับแต่งสำหรับชนิดข้อมูล บางประเภท และเร็วกว่าโค้ด Python มาตรฐาน Psyco ไม่รองรับ Python เวอร์ชัน 2.7 หรือใหม่กว่า
- PyS60เป็นตัวแปลภาษา Python 2 สำหรับ โทรศัพท์มือถือ Series 60 ซึ่ง Nokiaเปิดตัวในปี 2548 ตัวแปลภาษานี้ได้นำโมดูลจำนวนมากจากไลบรารีมาตรฐานของ Python มาใช้ รวมถึงโมดูลเพิ่มเติมสำหรับการรวมเข้ากับ ระบบปฏิบัติการ Symbian Nokia N900ยังรองรับ Python ผ่าน ไลบรารีวิดเจ็ต GTKทำให้สามารถเขียนและเรียกใช้โปรแกรมบนอุปกรณ์เป้าหมายได้[ 167 ]
ตัวแปลงรหัสเป็นภาษาอื่นๆ
มีคอมไพเลอร์/ ทรานสไพเลอร์ หลายตัว สำหรับภาษาออบเจ็กต์ระดับสูง โดยภาษาต้นทางอาจเป็น Python ที่ไม่มีข้อจำกัด ภาษาในกลุ่มย่อยของ Python หรือภาษาที่คล้ายกับ Python:
- Brython [ 168 ]และ Transcrypt [ 169 ] [ 170 ]คอมไพล์ Python เป็นJavaScript
- Cythonคอมไพล์ส่วนขยายของ Python ไปเป็น C โค้ดที่ได้สามารถนำไปใช้กับ Python ผ่านการเรียกใช้ API ระดับ C โดยตรงไปยังตัวแปลภาษา Python
- PyJL คอมไพล์/แปลงโค้ด Python บางส่วนเป็น "ซอร์สโค้ด Julia ที่อ่านง่าย บำรุงรักษาได้ และมีประสิทธิภาพสูง" [ 80 ]แม้ว่านักพัฒนาจะอ้างถึงประสิทธิภาพ แต่ก็เป็นไปไม่ได้สำหรับ โค้ด Python ทั่วไปกล่าวคือ การคอมไพล์เป็นภาษาที่เร็วกว่าหรือโค้ดเครื่องนั้นเป็นไปไม่ได้ในกรณีทั่วไป ความหมายของ Python อาจเปลี่ยนแปลงได้ แต่ในหลายกรณีสามารถเพิ่มความเร็วได้โดยมีการเปลี่ยนแปลงโค้ด Python เพียงเล็กน้อยหรือไม่เปลี่ยนแปลงเลย จากนั้นสามารถใช้ซอร์สโค้ด Julia ที่เร็วกว่าจาก Python หรือคอมไพล์เป็นโค้ดเครื่องได้
- Nuitkaคอมไพล์ Python เป็น C [ 171 ]คอมไพเลอร์นี้ใช้งานได้กับ Python 3.4 ถึง 3.13 (และ 2.6 และ 2.7) สำหรับแพลตฟอร์มหลักที่รองรับของ Python (และ Windows 7 หรือแม้แต่ Windows XP) และสำหรับ Android นักพัฒนาคอมไพเลอร์อ้างว่ารองรับ Python 3.10 อย่างเต็มที่ รองรับ Python 3.11 และ 3.12 บางส่วน และรองรับ Python 3.13 ในเชิงทดลอง Nuitka รองรับ macOS รวมถึงเวอร์ชันที่ใช้ Apple Silicon คอมไพเลอร์นี้ใช้งานได้ฟรี แต่มีส่วนเสริมเชิงพาณิชย์ (เช่น สำหรับการซ่อนซอร์สโค้ด)
- Numbaเป็นคอมไพเลอร์แบบ JIT ที่ใช้ใน Python โดยคอมไพเลอร์นี้จะแปลงโค้ด Python และ NumPy บางส่วนให้เป็นโค้ดเครื่องจักรที่ทำงานได้อย่างรวดเร็ว เครื่องมือนี้เปิดใช้งานได้โดยการเพิ่ม decorator ลงในโค้ด Python ที่เกี่ยวข้อง
- Pythran คอมไพล์ส่วนย่อยของ Python 3 เป็น C++ ( C++11 ) [ 172 ]
- RPythonสามารถคอมไพล์เป็นภาษา C ได้ และใช้ในการสร้างตัวแปลภาษา PyPy สำหรับ Python
- ตัวแปลง Python → 11l → C++ [ 173 ]คอมไพล์ชุดย่อยของ Python 3 เป็น C++ ( C++17 )
นอกจากนี้ยังมีคอมไพเลอร์เฉพาะทางอีกด้วย:
- MyHDL เป็น ภาษาสำหรับการอธิบายฮาร์ดแวร์ (HDL) ที่พัฒนาด้วยภาษา Python ซึ่งแปลงโค้ด MyHDL เป็นโค้ดVerilogหรือVHDL
มีโปรเจกต์เก่าๆ บางโปรเจกต์อยู่ รวมถึงคอมไพเลอร์บางตัวที่ไม่ได้ออกแบบมาเพื่อใช้กับ Python 3.x และไวยากรณ์ที่เกี่ยวข้อง:
- Grumpy ของ Google แปลง Python 2 เป็นGo [ 174 ] [ 175 ] [ 176 ] เวอร์ชันล่าสุดออกในปี 2017
- IronPython อนุญาตให้รันโปรแกรม Python 2.7 ด้วย . NET Common Language Runtime [ 177 ]เวอร์ชันอัลฟ่า (เปิดตัวในปี 2021) พร้อมใช้งานสำหรับ "Python 3.4 แม้ว่าคุณสมบัติและพฤติกรรมจากเวอร์ชันที่ใหม่กว่าอาจจะรวมอยู่ด้วย" [ 178 ]
- Jythonคอมไพล์ Python 2.7 เป็นไบต์โค้ด Java ทำให้สามารถใช้ไลบรารี Java จากโปรแกรม Python ได้[ 179 ]
- Pyrex (รุ่นสุดท้ายที่วางจำหน่ายในปี 2010) และShed Skin (รุ่นสุดท้ายที่วางจำหน่ายในปี 2013) สามารถคอมไพล์เป็นภาษา C และ C++ ตามลำดับ
ผลงาน
การเปรียบเทียบประสิทธิภาพระหว่างการใช้งาน Python ต่างๆ โดยใช้ภาระงานที่ไม่ใช่เชิงตัวเลข (เชิงการจัดเรียง) ได้ถูกนำเสนอในงาน EuroSciPy '13 [ 180 ]นอกจากนี้ ประสิทธิภาพของ Python เมื่อเทียบกับภาษาโปรแกรมอื่นๆ ยังได้รับการวัดประสิทธิภาพโดยเกมการวัดประสิทธิภาพภาษาคอมพิวเตอร์[ 181 ]
มีหลายวิธีในการเพิ่มประสิทธิภาพการทำงานของ Python แม้ว่าโดยธรรมชาติแล้ว Python จะเป็นภาษาที่ใช้การตีความ (interpreted language ) ก็ตาม วิธีการเหล่านี้รวมถึงกลยุทธ์หรือเครื่องมือต่อไปนี้:
- การคอมไพล์แบบทันเวลา (Just-in-time compilation ): การคอมไพล์ส่วนต่างๆ ของโปรแกรม Python แบบไดนามิกในระหว่างการทำงานของโปรแกรม เทคนิคนี้ใช้ในไลบรารีต่างๆเช่นNumbaและPyPy
- การคอมไพล์แบบคงที่ : บางครั้งโค้ด Python สามารถคอมไพล์เป็นโค้ดเครื่องจักรได้ก่อนที่จะทำการประมวลผล ตัวอย่างของวิธีการนี้คือCythonซึ่งคอมไพล์ Python เป็นภาษา C
- การทำงานพร้อมกันและการประมวลผลแบบขนาน : สามารถเรียกใช้งานหลายงานพร้อมกันได้ Python มีโมดูลต่างๆ เช่น `multiprocessing` เพื่อรองรับการประมวลผลแบบขนานนี้ นอกจากนี้ วิธีการนี้ยังช่วยเอาชนะข้อจำกัดของGlobal Interpreter Lock (GIL) ในงานที่ใช้ CPU ได้อีกด้วย
- โครงสร้างข้อมูลที่มีประสิทธิภาพ: ประสิทธิภาพยังสามารถปรับปรุงได้โดยการใช้ชนิดข้อมูล เช่น
Setสำหรับการทดสอบการเป็นสมาชิก หรือdequeสำหรับการดำเนินการcollectionsกับคิว - สามารถสังเกตเห็นการเพิ่มประสิทธิภาพได้โดยการใช้ไลบรารีเช่นNumPyไลบรารี Python ประสิทธิภาพสูงส่วนใหญ่ใช้CหรือFortranอยู่เบื้องหลังแทนที่จะใช้ตัวแปลภาษา Python [ 182 ]
การพัฒนาภาษา
การพัฒนา Python ส่วนใหญ่ดำเนินการผ่าน กระบวนการ Python Enhancement Proposal (PEP) กระบวนการนี้เป็นกลไกหลักในการเสนอคุณสมบัติใหม่ที่สำคัญ รวบรวมความคิดเห็นจากชุมชนเกี่ยวกับประเด็นต่างๆ และจัดทำเอกสารเกี่ยวกับการตัดสินใจด้านการออกแบบของ Python [ 183 ]รูปแบบการเขียนโค้ด Python ได้รับการกล่าวถึงใน PEP 8 [ 91 ] PEP ที่โดดเด่นจะได้รับการตรวจสอบและแสดงความคิดเห็นโดยชุมชน Python และสภากำกับดูแล[ 183 ]
การปรับปรุงภาษาสอดคล้องกับการพัฒนาการใช้งานอ้างอิง CPython รายชื่อผู้รับจดหมาย python-dev เป็นฟอรัมหลักสำหรับการพัฒนาภาษา ประเด็นเฉพาะต่างๆ ได้รับการพูดคุยกันครั้งแรกในระบบติดตามบั๊กRoundup ที่มูลนิธิเป็นผู้ดูแล[ 184 ]ในปี 2022 ประเด็นและการสนทนาทั้งหมดได้ถูกย้ายไปยังGitHub [ 185 ] การพัฒนาเริ่มต้นขึ้นบนที่เก็บซอร์สโค้ดที่โฮสต์เอง ซึ่งใช้ Mercurialจนกระทั่ง Python ย้ายไปที่ GitHub ในเดือนมกราคม 2017 [ 186 ]
การเผยแพร่เวอร์ชันสาธารณะของ CPython มีสามประเภท โดยแบ่งตามส่วนของหมายเลขเวอร์ชันที่เพิ่มขึ้น:
- เวอร์ชันที่ไม่เข้ากันกับเวอร์ชันก่อนหน้าซึ่งคาดว่าโค้ดจะเสียหายและต้องย้าย ด้วยตนเอง ส่วนแรกของหมายเลขเวอร์ชันจะเพิ่มขึ้น การเผยแพร่เหล่านี้เกิดขึ้นไม่บ่อยนัก—เวอร์ชัน 3.0 ได้รับการเผยแพร่ 8 ปีหลังจากเวอร์ชัน 2.0 ตามที่ Guido van Rossum กล่าว เวอร์ชัน 4.0 อาจจะไม่มีเลย[ 187 ]
- การเผยแพร่เวอร์ชันหลักหรือ "เวอร์ชันฟีเจอร์"ส่วนใหญ่เข้ากันได้กับเวอร์ชันก่อนหน้า แต่จะเพิ่มฟีเจอร์ใหม่ ๆ เข้ามา ส่วนที่สองของหมายเลขเวอร์ชันจะเพิ่มขึ้น เริ่มตั้งแต่ Python 3.9 การเผยแพร่เหล่านี้คาดว่าจะเกิดขึ้นทุกปี[ 188 ] [ 189 ]แต่ละเวอร์ชันหลักจะได้รับการสนับสนุนด้วยการแก้ไขข้อบกพร่องเป็นเวลาหลายปีหลังจากการเผยแพร่[ 190 ]
- การออกเวอร์ชันแก้ไขข้อบกพร่อง[ 191 ]ซึ่งไม่มีการเพิ่มคุณสมบัติใหม่ จะเกิดขึ้นประมาณทุกสามเดือน การออกเวอร์ชันเหล่านี้จะเกิดขึ้นเมื่อมีการแก้ไขข้อบกพร่องจำนวนมากเพียงพอตั้งแต่การออกเวอร์ชันครั้งล่าสุด ช่องโหว่ด้านความปลอดภัยจะได้รับการแก้ไขในเวอร์ชันเหล่านี้ด้วย ส่วนที่สามและส่วนสุดท้ายของหมายเลขเวอร์ชันจะเพิ่มขึ้น[ 191 ]
มีการปล่อย เวอร์ชันอัลฟ่า เบต้า และเวอร์ชันทดสอบจำนวนมากออกมาเพื่อใช้เป็นตัวอย่างและทดสอบก่อนการวางจำหน่ายเวอร์ชันสุดท้าย แม้ว่าจะมีกำหนดการคร่าวๆ สำหรับการวางจำหน่าย แต่ก็มักจะล่าช้าออกไปหากโค้ดยังไม่พร้อม ทีมพัฒนาของ Python ตรวจสอบสถานะของโค้ดโดยการรัน ชุด ทดสอบหน่วย ขนาดใหญ่ ในระหว่างการพัฒนา[ 192 ]
การประชุมวิชาการที่สำคัญที่สุดเกี่ยวกับ Python คือPyCon นอกจากนี้ยังมีโครงการให้คำปรึกษา ด้าน Python โดยเฉพาะ เช่นPyLadies
การตั้งชื่อ
ชื่อของ Python ได้รับแรงบันดาลใจจากกลุ่มตลกชาวอังกฤษMonty Pythonซึ่ง Guido van Rossum ผู้สร้าง Python ชื่นชอบในระหว่างการพัฒนาภาษา มีการอ้างอิงถึง Monty Python บ่อยครั้งในโค้ดและวัฒนธรรมของ Python [ 193 ]ตัวอย่างเช่นตัวแปร metasyntactic ที่มักใช้ในเอกสาร Python คือspamและeggsแทนที่จะเป็น foo และ bar แบบดั้งเดิม[ 193 ] [ 194 ] นอกจากนี้เอกสารอย่างเป็นทางการของ Python ยังมีการอ้างอิงถึงรูทีนของ Monty Python ต่างๆ อีกด้วย[ 195 ] [ 196 ]ผู้ใช้ Python บางครั้งเรียกว่า "Pythonistas" [ 197 ]
ภาษาโปรแกรมที่ได้รับอิทธิพลจาก Python
- Cobraมี เอกสาร คำขอบคุณที่ระบุว่า Python เป็นภาษาที่มีอิทธิพลอันดับแรก[ 198 ]
- ECMAScriptและJavaScriptยืมตัววนซ้ำและตัวสร้างจาก Python [ 199 ]
- Goได้รับการออกแบบมาเพื่อ "ความเร็วในการทำงานในภาษาแบบไดนามิกเช่น Python" [ 200 ]
- Juliaได้รับการออกแบบให้ "ใช้งานได้ง่ายสำหรับการเขียนโปรแกรมทั่วไปเช่นเดียวกับ Python" [ 201 ]
- Mojoเกือบจะเป็น[ 34 ] [ 202 ]ซูเปอร์เซ็ตของ Python [ 203 ]
- GDScriptได้รับอิทธิพลอย่างมากจาก Python [ 204 ]
- Groovy , Boo , CoffeeScript , F# , Nim , Ruby , [ 35 ] Swift , [ 36 ]และV [ 37 ]ก็ได้รับอิทธิพลเช่นกัน
ดูเพิ่มเติม
- รายชื่อซอฟต์แวร์แมชชีนเลิร์นนิงและดีพเลิร์นนิงสำหรับ Python
- รายชื่อหนังสือเกี่ยวกับการเขียนโปรแกรม Python
- pip (ตัวจัดการแพ็กเกจ)
- ไพด็อก
- นัมปี้
- ไซพาย
- จูไพเตอร์
- ไพทอร์ช
- ไซธอน
- ซีพีไพธอน
- โมโจ
- ไพเกม
- ไพคิวท์
- ไพจีทีเค
- ไพพี
- ไพคอน
- Google Colab – IDE ออนไลน์ที่ไม่ต้องตั้งค่าใดๆ และสามารถใช้งาน Python ได้
- เรนพาย
หมายเหตุ
- ^ตั้งแต่เวอร์ชัน 3.5 แต่คำแนะนำเหล่านั้นจะถูกละเลย ยกเว้นในกรณีที่ใช้เครื่องมือที่ไม่เป็นทางการ [ 5 ]
- ^ *ระดับ 1 : Linux 64 บิต, macOS ; Windows 64 บิตและ 32 บิต [ 6 ]
- ^ตั้งแต่นั้นมา เขาได้กลับมาทำงานอีกครั้งหลังจากเกษียณ และเรียกตัวเองว่า "BDFL-emeritus"
- เครื่องหมาย ^
delใน Python ทำงานต่างจากdeleteในภาษาอื่นๆ เช่น C++ซึ่งคำดังกล่าวใช้เพื่อเรียกตัวทำลายและปลดปล่อยหน่วยความจำฮีป
อ่านเพิ่มเติม
- ดาวนีย์, อัลเลน (กรกฎาคม 2024). คิดแบบ Python: วิธีคิดแบบนักวิทยาศาสตร์คอมพิวเตอร์ (ฉบับที่ 3). O'Reilly Media. ISBN 978-1-0981-5543-8.
- Lutz, Mark (2013). การเรียนรู้ Python (ฉบับที่ 5). O'Reilly Media. ISBN 978-0-596-15806-4.
- ซัมเมอร์ฟิลด์, มาร์ค (2009). การเขียนโปรแกรมใน Python 3 (ฉบับที่ 2). แอดดิสัน-เวสลีย์ โปรเฟสชันแนล. ISBN 978-0-321-68056-3.
- รามาลโญ่, ลูเซียโน (พฤษภาคม 2022) ไพธอน ที่คล่องแคล่วโอ ไรลีย์ มีเดียไอเอสบีเอ็น 978-1-4920-5632-4.
ลิงก์ภายนอก
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ไพธอน (ภาษาโปรแกรม)
Python เป็น ภาษาโปรแกรม ระดับ สูง อเนกประสงค์ ที่เน้น ความสามารถในการอ่านโค้ด ความเรียบง่าย และความง่ายในการเขียน โค้ด โดยใช้ การเยื้องที่สำคัญ [ 38 ] ไลบรารีมาตรฐาน ที่ครอบคลุม...
ประวัติศาสตร์
ภาษา Python ถูกคิดค้นขึ้นในช่วงปลายทศวรรษ 1980 [ 11 ] โดย Guido van Rossum ที่ Centrum Wiskunde & Informatica (CWI) ในประเทศเนเธอร์แลนด์ [ 48 ] มัน ถูกออกแบบมาให้เป็นภาษาโปรแกรมที่สืบทอดมาจากภาษา ABC ซึ่งได้รับแรงบันดาลใจจาก SETL [ 49 ] ที่สามารถ...
ปรัชญาการออกแบบและคุณสมบัติ
Python เป็น ภาษาโปรแกรมแบบหลายพาราดิก ม์ รองรับการเขียนโปรแกรมเชิงวัตถุและการเขียนโปรแกรมเชิงโครงสร้างอย่างเต็มที่ และคุณสมบัติหลายอย่างยังรองรับการเขียนโปรแกรมเชิงฟังก์ชันและ การเขียนโปรแกรมเชิงแง่มุม รวมถึง เมตาโปรแกรมมิง [ 62 ] และ เมตาออบเจ็กต์ [ 63 ]...
ข้อเสนอการปรับปรุง
ข้อเสนอการปรับปรุง Python [ หมายเหตุ 1 ] เป็นเอกสารการออกแบบสำหรับการให้ข้อมูลแก่ ชุมชน Python หรือข้อเสนอสำหรับคุณสมบัติใหม่ใน Python [ 85 ] PEP มีจุดประสงค์เพื่ออธิบายกระบวนการใหม่ใน Python ให้ ข้อกำหนดการตั้งชื่อ หรือจัดทำเอกสารกระบวนการในภาษา [ 86 ] PEP...