Python Programming/Python Interpreter
ภาษาไพทอนทำงานโดยการแปลคำสั่งทีละคำสั่งด้วยตัวแปลภาษาไพทอน (Python Interpreter) ซึ่งแตกต่างจากภาษาอื่นเช่น C หรือ Java ที่ต้องผ่านกระบวนการคอมไพล์เพื่อแปลคำสั่งทั้งหมดในคราวเดียวก่อนจึงจะเรียกใช้งานโปรแกรมได้ การสั่งงานคอมพิวเตอร์ด้วยภาษาไพทอนจึงสามารถทำได้ทั้งในโหมดโต้ตอบ (interactive mode) และโหมดสคริปต์ (script mode) นอกจากนั้นเครื่องมือบางอย่างเช่น Spyder หรือ Ipython Notebook สามารถช่วยให้เราใช้งานทั้งสองโหมดผสมผสานกันได้
การใช้งานไพทอนในโหมดโต้ตอบ
การใช้งานไพทอนในโหมดโต้ตอบทำได้โดยการเรียกคำสั่ง python โดยไม่ต้องระบุชื่อไฟล์ใด ๆ เพิ่มเติม ไพทอนจะแสดงรายละเอียดเวอร์ชันและข้อความทักทาย และเข้าสู่ไพทอนเชลล์โดยการแสดงการรอรับคำสั่งด้วยเครื่องหมายพร็อมพ์ ที่มีสัญลักษณ์เป็น >>>
$ python Python 2.7.3 (default, Jun 22 2015, 19:33:41) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>
การเรียกใช้คำสั่ง python ข้างต้นอาจมีความสับสนว่าเป็นไพทอนของระบบปฏิบัติการหรือของ Anaconda ให้ลองใช้คำสั่ง which python เพื่อตรวจสอบว่าเป็นไพทอนตัวใด
$ which python /usr/bin/python
หากผลลัพธ์เป็นไปตามข้างต้นแสดงว่าตัวแปลภาษาไพทอนที่เรียกใช้เป็นตัวที่ติดมาให้กับระบบปฏิบัติการ ทั้งนี้ผลลัพธ์ที่ได้อาจแตกต่างกันไปในแต่ละเครื่องหรือแต่ละผู้ใช้ ขึ้นอยู่กับการตั้งค่าตัวแปร PATH ของเชลล์ยูนิกซ์ที่ใช้อยู่ จึงควรป้อนพาธแบบเต็มไปยังไพทอนตัวที่ต้องการใช้จริง ๆ ตัวอย่างเชนหากต้องการรันไพทอนของ Anaconda เพื่อใช้งานไลบรารีที่ Anaconda จัดเตรียมไว้ให้ ควรต้องใช้คำสั่งด้านล่าง (สมมติว่า Anaconda ถูกติดตั้งไว้ภายใต้โฮมไดเรคตอรีของตนเอง)
$ ~/anaconda/bin/python Python 2.7.10 |Anaconda 2.3.0 (64-bit)| (default, May 28 2015, 17:02:03) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2 Type "help", "copyright", "credits" or "license" for more information. Anaconda is brought to you by Continuum Analytics. Please check out: http://continuum.io/thanks and https://binstar.org >>>
คำสั่งใด ๆ ที่ป้อนลงไปในไพทอนเชลล์จะถูกตีความและประมวลผลทันที
>>> print 'Hello' Hello
ไพทอนเชลล์จะแสดงค่าของนิพจน์ที่ป้อนลงไปแม้ว่าจะไม่เป็นคำสั่งที่สมบูรณ์ก็ตาม ตัวอย่างเช่น
>>> 3+5 8 >>> 'Hello' 'Hello'
ไพทอนอาจตีความได้ว่าคำสั่งหรือนิพจน์ที่ป้อนลงไปนั้นยังไม่สมบูรณ์ เช่นนิพจน์ที่ปิดวงเล็บไม่ครบ กรณีนี้ไพทอนจะยังไม่ประมวลผลคำสั่งแต่จะรอส่วนของคำสั่งเพิ่มเติมในบรรทัดถัดไปด้วยสัญลักษณ์ ...
>>> 3+(5* ... 2) 13
เราสามารถกดปุ่ม Ctrl-C ที่สัญลักษณ์ ... เพื่อยกเลิกการป้อนคำสั่งที่ป้อนค้างไว้ได้
>>> 3+(5* ... กดปุ่ม Ctrl-C KeyboardInterrupt >>>
กดปุ่ม Ctrl-D หรือพิมพ์คำสั่ง exit() เพื่อออกจากไพทอนเชลล์
>>> exit() หรือกดปุ่ม Ctrl-D $
เห็นได้ว่าข้อดีของโหมดโต้ตอบคือทำให้เราเห็นผลลัพธ์การทำงานของแต่ละคำสั่งได้ทันทีโดยไม่ต้องเสียเวลาสร้างไฟล์และคอมไพล์โปรแกรม แต่ข้อจำกัดของโหมดนี้คือหากต้องการทดลองเปลี่ยนแปลงคำสั่งใดคำสั่งหนึ่งข้างต้นเพื่อดูผลกระทบต่อคำสั่งอื่นที่ตามมาจะต้องป้อนคำสั่งเหล่านี้ลงไปใหม่ทั้งหมด แม้ว่าการกดลูกศรขึ้น (↑) จะทำให้ไพทอนเชลล์ดึงคำสั่งที่เคยป้อนลงไปกลับมาได้โดยไม่ต้องพิมพ์ใหม่ แต่หากต้องทำต่อเนื่องหลาย ๆ ครั้งก็ยังเป็นการเสียเวลาและไม่สะดวกเท่าใดนัก นอกจากนั้นเมื่อออกจากไพทอนเชลล์ไปแล้วคำสั่งที่เคยพิมพ์เอาไว้ทั้งหมดจะไม่สามารถถูกดึงกลับมาได้อีก
การใช้งานไพทอนในโหมดสคริปต์
แทนที่จะให้ไพทอนทำงานทีละคำสั่งในโหมดโต้ตอบ เราสามารถรวมคำสั่งเหล่านี้เข้าด้วยกันเป็น บท หรือ สคริปต์ (script) ไว้ในไฟล์เพื่อสั่งให้ไพทอนทำงานรวดเดียวได้ ซึ่งเทียบเท่ากับการเขียนโปรแกรมในภาษาอื่น ๆ สคริปต์ไฟล์สามารถสร้างได้จากเท็กซ์เอดิเตอร์ตัวใดก็ได้ โดยบันทึกชื่อไฟล์ให้มีนามสกุลเป็น .py ตัวอย่างเช่นไฟล์ hello.py ประกอบไปด้วยคำสั่ง
# ไฟล์ first.py
print 'Hello'
a = 3
b = 8
print a*2 + b*3
ใช้คำสั่ง python เพื่อรันสคริปต์ที่สร้างขึ้น
$ python first.py Hello 30
ดังที่ได้อธิบายไปแล้ว การใช้คำสั่ง python โดยไม่ระบุพาธอาจทำให้เกิดความสับสนว่ากำลังใช้งานไพทอนตัวใดอยู่ อย่างไรก็ตามตัวอย่างในเอกสารนี้ทั้งหมดไม่ได้มีการใช้งานไลบรารีพิเศษใด ๆ เพิ่มเติมนอกเหนือจากไลบรารีมาตรฐานที่ติดมาให้กับไพทอนทุกตัว จึงสามารถใช้งานไพทอนตัวใดก็ได้
เมื่อสคริปต์ถูกประมวลผลจนเสร็จสิ้นแล้วไพทอนจะจบการทำงานทันที เราสามารถสั่งให้ไพทอนเข้าสู่โหมดโต้ตอบหลังจากรันสคริปต์เสร็จโดยใช้อ็อปชัน -i ได้ ไพทอนจะแสดงสัญลักษณ์พร็อมพ์เพื่อรับคำสั่งเพิ่มเติมแทนที่จะจบการทำงานตามปกติ
$ python -i first.py Hello 30 >>> >>> a 3 >>> b 8 >>> exit() $
ไฟล์สคริปต์สามารถแก้ไขและรันทดสอบใหม่ได้เรื่อย ๆ เท่าที่ต้องการ ทำให้สะดวกในการนำมาสร้างเป็นแอพลิเคชันที่พร้อมนำไปใช้งานที่เครื่องใดก็ได้ที่มีไพทอนติดตั้งเอาไว้ อีกทั้งการแก้ไขคำสั่งด้วยเท็กซ์เอดิเตอร์นั้นยังสะดวกกว่าการแก้ไขคำสั่งภายในไพทอนเชลล์มาก แต่ข้อจำกัดของสคริปต์คือมันจะถูกประมวลผลตั้งแต่ต้นจนจบรวดเดียว ทำให้ทราบได้ยากว่าไพทอนทำงานไปถึงคำสั่งใดแล้วเว้นแต่จะมีการป้อนคำสั่ง print เพื่อแสดงสถานะเอาไว้ และไม่สามารถสั่งให้ไพทอนหยุดการทำงานค้างไว้ที่จุดใดจุดหนึ่งของสคริปต์ได้*
*หมายเหตุ: ในความเป็นจริงเราสามารถหยุดการทำงานของสคริปต์ที่ตำแหน่งใดก็ได้โดยอาศัยโมดูล pdb แต่จะขอยังไม่กล่าวถึงในเอกสารนี้
การใช้งานไพทอนผ่าน IPython Notebook
IPython Notebook (ปัจจุบันใช้ชื่อว่า Jupyter) ถูกพัฒนาขึ้นเพื่อทำให้ผู้เขียนโปรแกรมไพทอนสามารถป้อนคำสั่งในรูปแบบที่ผสมผสานข้อดีของโหมดโต้ตอบและโหมดสคริปต์ไว้ด้วยกัน โปรแกรม IPython Notebook นั้นไม่ได้ติดมากับไพทอนมาตรฐานจึงต้องมีการติดตั้งเพิ่มเติมด้วยตนเอง แต่ถ้าได้ติดตั้ง Anaconda เอาไว้แล้วก็สามารถเรียกใช้งานได้ทันทีโดยใช้คำสั่ง ipython notebook
$ ~/anaconda/bin/ipython notebook [I 22:30:48.648 NotebookApp] Using MathJax from CDN: https://cdn.mathjax.org/mathjax/latest/MathJax.js [I 22:30:48.689 NotebookApp] Serving notebooks from local directory: /home/cpj [I 22:30:48.689 NotebookApp] 0 active kernels [I 22:30:48.689 NotebookApp] The IPython Notebook is running at: http://localhost:8888/ [I 22:30:48.689 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). Created new window in existing browser session.
ซึ่งโปรแกรมจะเปิดหน้าต่างขึ้นในเว็บเบราเซอร์ให้อัตโนมัติ ให้สร้างโน้ตบุ๊คขึ้นมาใหม่โดยเลือกเมนู New → Python 2 ดังแสดง
จะได้ผลลัพธ์ดังหน้าต่างด้านล่าง
กล่องรับข้อความที่ปรากฏขึ้นมาหนึ่งกล่องนั้นเรียกว่าเซลล์ (cell) ซึ่งเปรียบเสมือนเอดิเตอร์หนึ่งหน้าต่าง เราสามารถป้อนคำสั่งไพทอนลงไปในเซลล์กี่คำสั่งก็ได้เท่าที่ต้องการ คำสั่งเหล่านี้จะยังไม่ถูกประมวลผลจนกว่าจะสั่งให้รันเซลล์โดยใช้เมนู Cell → Run (หรือคลิ้กที่ไอคอน run cell รูปสามเหลี่ยมในแถบเครื่องมือ หรือกดปุ่ม Shift-Enter) ดังแสดง
IPython Notebook มีกลไกการทำงานโดยสังเขปดังนี้
- คำสั่งที่พิมพ์ลงไปในแต่ละเซลล์จะถูกรวบรวมเอาไว้โดยยังไม่ถูกประมวลผล
- เมื่อมีการสั่งรันเซลล์ใด ๆ คำสั่งทั้งหมดในเซลล์จะถูกส่งไปประมวลผลในคราวเดียวด้วยตัวแปลภาษาไพทอนที่รันอยู่ในฉากหลัง (ในที่นี้เรียกว่าเคอร์เนล)
- ผลลัพธ์ของการรันชุดคำสั่งนั้น ๆ ทั้งหมดจะนำมาแสดงผลไว้บนหน้าเว็บถัดจากเซลล์ที่สั่งรัน
- เซลล์ใดจะถูกรันก่อนหรือหลังก็ได้ตามต้องการโดยไม่ขึ้นอยู่กับลำดับที่ปรากฏในโน้ตบุ๊ค แต่ถ้าหากมีการใช้เมนู Cell → Run All เซลล์จะถูกรันตั้งแต่แรกไล่ลงมา
- ตัวเลขที่ปรากฏอยู่ในวงเล็บ [] หน้าเซลล์เป็นตัวระบุลำดับที่เซลล์นั้นถูกรัน หากปรากฏเป็นสัญลักษณ์ [*] แสดงว่าการประมวลผลเซลล์นั้นยังไม่เสร็จ ซึ่งมักพบในกรณีที่ใช้คำสั่งประเภทลูป คำสั่งหน่วงเวลา หรือคำสั่งที่ใช้เวลาในการประมวลผลมาก
- หากต้องการหยุดการประมวลผลของเซลล์ที่ค้างอยู่ให้เลือกเมนู Kernel → Interrupt หรือกดปุ่ม interrupt kernel รูปสี่เหลี่ยมบนแถบเครื่องมือ
- ตัวแปรทั้งหมดที่กำหนดค่าขึ้นมาจะถูกเคอร์เนลจำสถานะเอาไว้ตราบเท่าที่เคอร์เนลยังทำงานอยู่ เราสามารถสั่งให้เคอร์เนลเริ่มต้นใหม่ด้วยเมนู Kernel → Restart ซึ่งเป็นการยุติการทำงานของไพทอนที่รันอยู่ในฉากหลังและสั่งให้เริ่มต้นใหม่ (เสมือนว่าออกจากไพทอนเชลล์แล้วรันขึ้นมาใหม่)
- ข้อความในเซลล์ทั้งหมดรวมถึงผลลัพธ์ปัจจุบันจะถูกบันทึกเอาไว้เป็นเอกสารที่เรียกว่า โน้ตบุ๊ค ซึ่งอยู่ในรูปไฟล์นามสกุล .ipynb ภายใต้ไดเรคตอรีที่เรียก IPython Notebook ขึ้นมา เราสามารถเปลี่ยนชื่อโน้ตบุ๊คได้โดยคลิ้กที่ชื่อข้างขวาของโลโก้ Jupyter Notebook ที่ด้านบนสุดของหน้าเว็บ
- การปิดหน้าเว็บไม่ได้เป็นการยุติการทำงานของ IPython Notebook หากต้องการเลิกใช้งานให้กลับไปที่เทอร์มินัลที่เรียก IPython Notebook ขึ้นมาแล้วกด Ctrl-C สองครั้ง
นอกจากการป้อนและรันโค้ดไพทอนแล้วเรายังสามารถเพิ่มเติมรายละเอียดผสมลงไปในโน้ตบุ๊คในรูปของข้อความอธิบาย ภาพ และสื่ออื่น ๆ เพื่อสร้างเป็นเอกสารที่สมบูรณ์ในตัวเองดังตัวอย่าง
โน้ตบุ๊คที่สร้างขึ้นพร้อมนำไปแชร์เผยแพร่ให้กับผู้อื่นได้โดยง่าย เว็บ http://nbviewer.ipython.org/ เป็นเว็บหนึ่งที่ให้บริการแชร์เอกสารที่สร้างขึ้นจาก IPython Notebook โดยไม่เสียค่าใช้จ่ายใด ๆ พร้อมทั้งตัวอย่างโน้ตบุ๊คที่น่าสนใจมากมาย
หน้าก่อน: Setting Up Python | สารบัญ | หน้าต่อไป: Mathematical Expressions |