Step 1 : พูดคุยรายละเอียดงาน

นัดพูดคุยกับทางแพลตฟอร์มเพื่อคุยรายละเอียดงานหรือส่งรายละเอียดงานผ่านฟอร์ม
โทรปรึกษาฟรี 0815459423

Step 2 : ขอใบเสนอราคา และชำระเงิน

ตกลงจ้างงาน โดยขอใบเสนอราคากับทางแพลตฟอร์ม และชำระเงิน

Step 3 : แพลตฟอร์มส่งงาน

ทางแพลตฟอร์มจะส่งงานให้ผู้ว่าจ้างตรวจสอบและปรับแก้ไขได้ 3 ครั้ง หากไม่มีแก้ไขถือว่าการส่งมอบงานเสร็จสิ้น

คำแนะนำเพิ่มเติม

Supapongai เป็นแพลตฟอร์มทำเว็บไซต์โดยคุณศุภพงศ์ Web Developer มืออาชีพ ร่วมงานกับบริษัทชั้นนำมากมาย เช่น FutureSkill , Skillane , The Blacksmith และอื่นๆ มั่นใจ ปลอดภัย งานดีมีคุณภาพ พร้อมไลน์ให้คำปรึกษาตลอดการใช้งาน

ทำความเข้าใจโมดูล sys ในภาษา Python ง่ายๆใน 10 นาที

ทำความเข้าใจโมดูล sys ในภาษา Python ง่ายๆใน 5 นาที

ทำความเข้าใจโมดูล sys ในภาษา Python ง่ายๆใน 10 นาที

Introduction

สำหรับคนที่เขียน Python มาสักระยะหนึ่งแล้ว เวลาไปดาวน์โหลด source code จาก github หรือเวลาที่เราเข้าไปอ่าน source code ใน library ที่เป็นของคนอื่นเขียนไว้มักจะเจอโค้ดคำสั่ง sys.argv[1] หรือ อะไรทำนองนี้อยู่เสมอ ซึ่งแท้จริงแล้ว sys.argv นั้นเป็นเพียงส่วนหนึ่งของ library sys เท่านั้น ในวันนี้ผมจะมาพานักอ่านทุกท่านมาทำความเข้าใจว่าไอ้เจ้า library sys ตัวเนี่ยมันคืออะไรกันแน่  โอเคว่าแล้วมาเริ่มกันเลย

sys คืออะไร

เบื้องต้นก่อนเราต้องมาทำความรู้จักกับ library sys ในภาษา Python ก่อน ซึ่งไอ้เจ้า sys ตัวนี้มันเป็น library ที่จัดเตรียมฟังก์ชันและตัวแปรที่ใช้เพื่อจัดการกับส่วนต่างๆของ Python Runtime Environment เอาไว้ ช่วยให้เราเข้าถึงพารามิเตอร์และฟังก์ชันเฉพาะของระบบได้ง่าย ซึ่ง library ตัวนี้ก็มีฟังก์ชันหลากหลายให้เลือกใช้งานเลย เดี๋ยวเราจะไปทำความรู้จักกันทีละตัวกันไปเลย

1. sys.argv คืออะไร

มาถึงตัวแรกกันก่อนเลยก็คือ sys.argv ตัวนี้เป็นหนึ่งในฟังก์ชันหนึ่งของ library sys เท่านั้น หน้าที่ของมันก็คือ ส่งค่ากลับมาเป็นลิสต์ของ String 2 ตัว ก็คือ ชื่อไฟล์ที่เรารันปัจจุบันเป็นสมาชิกของลิสต์ตัวแรก และ อากิวเมนท์ที่เราใส่เข้าไปเป็นสมาชิกที่ตัวที่ 2 ทีนี้บางคนก็อาจจะงงว่าเอ๊ะแล้ว อากูเมนท์ (arguements) ที่ว่าเนี่ยมันคืออะไรกันแน่อีก

ความหมายของอากิวเมนท์ Arguement

arguement คือ ค่าที่เราโยนเข้ามาให้กับไฟล์ python ที่เรากำลังรันอยู่ จาก command line หรือ terminal นั่นเอง อาจจะงงมาดูตัวอย่างกันเลย

ภาพที่ 1 code การทำงานของ sys.argv

ในที่นี้ผมจะเขียนโค้ด Python ไว้เหมือนกับภาพด้านบนนะครับ แล้วจากนั้นผมจะเซฟไฟล์นี้ไว้แล้วตั้งชื่อว่า sysargv.py แล้วเซฟไว้ที่ Desktop เสร็จแล้วไปดูขั้นตอนต่อไปกันเลยครับ

ภาพที่ 2 ภาพ Desktop และไฟล์ sysargv.py

ขั้นตอนถัดมาก็คือการรันไฟล์ sysargv.py ที่เราสร้างขึ้นมานั้นเองครับ แต่เราจะไม่ใช้ Editor รันแบบทั่วๆไปนะครับ ในที่นี้เราจะใช้ Command Line ในการรัน เพื่อที่เราจะได้ใส่อากิวเมนท์ (arguement) จากภายนอกเข้าไปได้นั่นเอง โอเคครับ เบื้องต้นผมก็ทำการเปิด Command Line ขึ้นมาก่อน แล้วทำการใช้คำสั่ง cd ตามด้วย path หรือพูดง่ายๆว่าคือที่อยู่ของไฟล์ sysargv.py ที่เราทำการ save ไว้ที่ Desktop นั่นเอง ซึ่ง path ของมันก็ต้องเป็น Desktop อยู่แล้วจริงไหมครับ เพราะเรา save ไปที่ Desktop แล้วเราก็ทำตามขั้นตอนด้านล่าง 2 เสต็ป 

  • cd Desktop แล้วกด Enter หนึ่งที 
  • ขั้นตอนถัดมาเราจะรันไฟล์ โดยใช้คำสั่ง python ชื่อไฟล์ที่จะรัน อากูเมนท์  python sysargv.py “Merry Christmas” แล้วกด Enter ก็จะได้ผลลัพธ์ตามภาพด้านล่าง

ภาพที่ 3 ผลลัพธ์การรัน

คำอธิบาย

สังเกตุคำสั่ง python sysargv.py “Merry Christmas” นะครับ ตาม syntax ที่ให้ข้างบนไป ตัวข้อความ Merry Christmas ตัวนี้จะเรียกว่าเป็นอากิวเมนท์ (arguement) ที่เราใส่เข้ามาจากภายนอกไฟล์ sysargv.py นะครับ ซึ่งไอ้ข้อความ Merry Christmast จะถูกมองว่าเป็น String แล้วไปแทนที่เป็น sys.argv[1] หรือก็คือไปเป็นสมาชิกตัวที่ 2 ใน List ที่คำสั่ง sys.argv ส่งค่ากลับมานั้นเอง ส่วนคำสั่ง sys.argv นั้น จะส่ง List ของสมาชิก 2 ตัว และเราสามาถเข้าถึงสมาชิกในลิสต์ได้ด้วยวงเล็บปีกกา (square bracket) เหมือนลิสต์อื่นทั่วๆไป [] ได้แก่ 

  • สมาชิกตัวแรก sys.argv[0] จะเป็นชื่อไฟล์ที่เรารัน ในที่นี้ คือ sysargv.py
  • สมาชิกตัวที่สอง sys.argv[1] จะเป็นอากูเมนท์ที่เราใส่เข้าไป ก็คือ “Merry Christmas” นั่นเอง

เมื่อเป็นแบบนี้แล้ว ในไฟล์ sysargv.py ก็จะทำการประมวลผลฟังก์ชัน plus() โดยที่ฟังก์ชัน plus รับค่า sys.argv[0] และ sys.argv[1] เข้าไป ทีนี้ฟังก์ชัน plus ก็จะประมวลผลแล้วคืนค่า sys.argv[0] + sysargv[1] มา นั่นก็หมายความว่าเราจะได้ “sysargv.py” ซึ่งเป็นค่าของ sys.argv[0]  + “Merry Christmas” ซึ่งเป็นค่าของ sys.argv[1] ทำให้ได้ผลลัพธ์เป็นการต่อ String หรือเรียกว่า String Concatenate นั่นเอง ซึ่งผลลัพธ์ที่ได้ก็จะเป็น sysargv.pyMerry Christmas ในบรรทัดสุดท้ายของการรันนั่นเองครับ

2. sys.path 

ในตัวถัดไปที่ผมอยากให้นักอ่านทุกท่านรู้จักก็คือ sys.path นั่นเอง sys.path นั้นจะทำการแสดงโฟลเดอร์ หรือที่เรียกว่าไดเรคทอรี่ (Directory) ที่ตัว intepreter ใน Python จะไปค้นหาเมื่อเวลาเรา import โมดูลมานั่นเองหากอธิบายให้เข้าใจง่ายๆ เมื่อโมดูล (โมดูลคือไฟล์ python) ถูก import ภายในไฟล์ Python ตัว Intepreter จะค้นหาไฟล์โมดูลที่ใน Work Directory หรือก็คือโฟลเดอร์ที่เรากำลังรันไฟล์ Python อยู่ดูก่อน ถ้าหาแล้วไม่เจอมันจะไปหาใน list ของ directory (directory เป็นโฟลเดอร์ที่ประกอบด้วยโมดูลที่เกี่ยวข้อง) ที่กำหนดไว้โดย sys.path นั่นเอง

ภาพตัวอย่างการเรียกใช้งาน

3. sys.modules

หากเราต้องการจะดูว่า library ที่เราติดตั้งในเครื่องของเรามีอะไรบ้างแล้วมันอยู่ที่ไหน sys.modules คือคำตอบที่จะมาช่วยเราในวันนี้ โดยความสามารถของมันก็คือ sys.modules จะ return เป็น dictionary ที่มี key เป็นชื่อ library หรือโมดูลที่เราติดตั้งไว้ในเครื่อง และมี Value เป็น Path หรือที่อยู่ของ library หรือโมดูลตัวนั้น 

ภาพตัวอย่างการเรียกใช้งาน

4. sys.stdout.write

ในตัวถัดมาที่อยากให้รู้จักอีกก็คือ sys.stdout.write ตัวนี้จะให้ผลลัพธ์เหมือนการใช้คำสั่ง print ในภาษา python เลย วิธีใช้ก็ง่ายๆ sys.stdout.write(“ข้อความที่ต้องการปริ้น”) เราก็จะเห็นข้อความปริ้นออกมาทางจอภาพตามต้องการ

ภาพตัวอย่างการเรียกใช้งาน

5. sys.stdout.flush()

ตัวนี้เป็นอีก 1 ฟังก์ชัน ของโมดูล sys ที่สำคัญมากอีก 1 ตัวเลย โดยฟังก์ชันนี้จะทำการอ่านข้อมูลที่อยู่ใน Buffer แล้ว print ออกมาที่ terminal หรือก็คือทางจอภาพของเรานั่นเอง ซึ่งโดยกระบวนการแบบนี้มีชื่อเรียกเท่ๆว่า Flush ข้อมูลนั่นเอง ส่วนในกรณีที่ใน Buffer ไม่มีข้อมูลอะไรอยู่ก็จะ return None ออกมา 

ภาพตัวอย่างการเรียกใช้และผลลัพธ์

คำอธิบาย

ภาพด้านซ้านเป็นโค้ดสำหรับแสดงตัวอย่างการทำงานของ flush นะครับ จะเห็นว่าผมวน loop โดยใช้for i in range(10) ทีนี้เครื่องคอมพิวเตอร์ของเราจะอ่าน range(10) เป็นเลข 0 1 2 3 4 5 6 7 8 9 ไว้ใน Buffer ก่อน แล้วจึงค่อยวน for loop ทำให้พอเจอคำสั่ง sys.stdout.flush ข้อมูลเลข 0-9 ที่เก็บไว้ใน Buffer ตอนแรกจะถูกวน loop พิมพ์ออกทางจอภาพทั้งหมดเลย ตามภาพด้านซ้ายมือเลยครับ

6. ฟังก์ชันอื่นๆของ sys

เอาละครับมาถึงส่วนสุดท้ายของบทความกันแล้ว หวังว่าอ่านแล้วจะยังไม่ง่วงกันนะครับ ในส่วนนี้ผมก็จะแนะนำฟังก์ชันอื่นๆที่ค่อนข้างมีประโยชน์และพบเห็นบ่อยๆรวมไว้ที่หัวข้อนี้เลย ได้แก่

  • sys.version เป็นคำสั่งเอาไว้ดู version ของ python เที่เรากำลังใช้งานอยู่
  • sys.platform เป็นคำสั่งเอาไว้เช็ค Platform ของเครื่องเรา เช่น win32, win64, อื่นๆ
  • sys.executable เป็นคำสั่งเอาไว้ดู path ของ Python Executor หรือ python.exe นั่นแหละ 
  • sys.maxsize เป็นคำสั่งเอาไว้ return ค่าที่มากที่สุดที่เป็นไปได้ของตัวแปร 1 ตัว ของ Data Type  Py_ssize_t ที่จะสามารถเก็บได้ ์

Note : โดยทั่วไปค่าสูงสุดที่ตัวแปร 1 ตัว จะเก็บลงใน Py_ssize_t ได้ คือ ถ้าเป็น 32 bit จะมีค่าเป็น 231 – 1 และ 64 bit จะมีค่าเป็น 263 – 1

ภาพตัวอย่างการเรียกใช้และผลลัพธ์

7. sys.setrecursionlimit และ sys.getrecursionlimit

สุดท้ายแต่ยังไม่ท้ายสุดนะเออ แถมให้อีกนิดนึงกับการจัดการกับจำนวนรอบของการวนซ้ำ หรือ การทำ recursive สามารถจัดการได้โดยใช้โมดูล sys ซึ่งจะมีฟังก์ชันที่จัดการกับเรื่องนี้อยู่ 2 ตัว ได้แก่

  • sys.getrecursionlimit() ฟังก์ชันนี้จะ return จำนวนรอบสูงสุดของการทำ recursive  ออกมาให้ เช่น 3000 
  • sys.setrecursionlimit(จำนวนรอบใหม่) ฟังก์ชันนี้จะทำการเปลี่ยนแปลงจำนวนรอบสูงสุดของการทำ recursive ได้

ภาพตัวอย่างการเรียกใช้และผลลัพธ์

ผลลัพธ์การรัน

คำอธิบาย

1. บรรทัดแรกใช้ sys.getrecursionlimit() เพื่อดูรอบสูงสุดของการทำ recursive ปัจจุบัน ได้ 3000

2. บรรทัดถัดมาใช้ sys.setrecursionlimit(5000) เพื่อปรับค่ารอบสูงสุดของ recursive ใหม่ 

3. บรรทัดสุดท้ายใช้ sys.getrecursionlimit() อีกครั้งเพื่อดูรอบที่เปลี่ยนไป

สรุป

ก็จบกันไปแล้วนะครับ สำหรับบทความทำความเข้าใจ sys ในภาษา Python ง่ายๆใน 10 วินาที บางคนอ่านมาอาจจะบอกว่าเกิน 10 นาที ก็ได้ 555+ แต่ไม่ว่าจะแบบไหนก็ตามผมก็อยากให้นักอ่านทุกท่านได้ความรู้อย่างเต็มที่ เพราะเรื่องพวกนี้หาอ่านแบบภาษาไทยได้ยาก สุดท้ายนี้ก็หวังว่านักอ่านทุกท่านจะได้รับความรู้กันไปเต็มๆแล้วนำเอาไปใช้งานกันได้แบบสบายๆนะครับ บทความนี้เขียนขึ้นมาในช่วงวันคริสมาสต์ผมก็ของถือโอกาสนี้ Merry Christmas ทุกท่านที่มาอ่าน และสวัสดีปีใหม่ด้วยเลยนะครับ แล้วเจอกันบทความหน้าครับ สวัสดีครับ 

 

Reference

Article Rate
5/5