ภาษาโปรแกรมมง่ิ ไพธอนPython programming languageเอกวทิ ยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลยั นเรศวร
2
รายชอื่ ผูจ้ ัดทำชอ่ื รหสั นิสิต หน้าทีด่ ำเนินการนายฉตั รชยั ดำดี 46320388 แบบฝึกหัดนายทรงยศ คชนลิ 46320511 จดั ทำเอกสารการเรียนนางสาวธญั ญากร แกว้ ประสงค์ 46320610 ผชู้ ่วยสอนนายประจักษ์ เจตะภัย 46320693 ผู้ช่วยสอนและแบบฝึกหดันายมารตุ จันทรบ์ ัว 46320818 แบบฝึกหดันางสาวศรินยา อย่สู ุขดี 46320925 ผ้ชู ว่ ยสอนนางสาวณัฐณชิ า คงประกอบ 46321097 ผู้ช่วยสอนนายอุทศิ ศักดิส์ ิทธ์ิ 46321139 ผชู้ ว่ ยสอนและแบบฝึกหัดนายอรรณพ สุวัฒนพิเศษ 46321150 ผู้สอนและจดั ทำเอกสารเรยี น 3
4
คำนำ ภาษาไพธอนเปน็ ภาษาท่ีได้รบั ความนยิ มอย่างมากในปัจจบุ ันเน่อื งจากความสามารถท่ีสูง, การเรยี นรู้ท่ีรวดเร็ว, การเขียนระบบท่ีเขา้ ใจงา่ ย และสามารถขยายขดี ความสามารถในการสรา้ งโปรแกรมและซอฟต์แวร์ที่สงู มากขน้ึ ตลอดเวลา ทางทมี ผู้จดั ทำจงึ เลง็ เห็นวา่ ควรนำความรู้ ความเขา้ ใจในการเขยี นโปรแกรมดว้ ยภาษาไพธอนมาเผยแพร่ ด้วยจะได้ผ้อู น่ื ได้รับความรู้และได้เขา้ ถึงภาษาที่เขยี นใจง่าย, ทำงานรวดเร็ว และสามารถสรา้ งสรรค์งานไดอ้ ย่างมคี วามสามารถสูง อีกทั้งซอฟตแ์ วรท์ ใ่ี ช้สรา้ งโปรแกรมและซอฟต์แวร์ดว้ ยภาษาไพธอนน้ันมีทงั้ แจกฟร,ี รหัสเปิด และเชิงธุรกิจ ซึ่งมีขดี ความสามารถที่แตกตา่ งกัน แต่ถึงแม้จะเปน็ ซอฟต์แวร์ท่ีใช้เขยี นโปรแกรมดว้ ยภาษาไพธอนจะแจกฟรี หรอื เปน็ รหสั เปดิ ก็ไมไ่ ด้ด้อยไปกว่าเชิงธรุ กจิ เลย จึงเปน็ ทางเลอื กที่ดที จ่ี ะศึกษาเป็นทางเลอื กอกี ทางหนึง่ นอกเหนือจากภาษาอืน่ ๆ ท่ไี ด้รบั ความนิยมอยู่แลว้ ทางทมี งานจึงหวงั วา่ ท่านผู้ที่นำเอกสารนี้ไปใช้ในการศกึ ษาจะได้รบั ประโยชน์สูงสุดในการเขยี นโปรแกรมและซอฟตแ์ วรด์ ว้ ยภาษาไพธอน ทีมผ้จู ดั ทำ 5
6
สารบญั1 แนะนำภาษาไพธอน 13 1.1 ประวัติ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.1.1 Python 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.1.2 Python 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.1.3 อนาคต . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.2 หลักปรัชญาของภาษาไพธอน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.3 Language Evaluation Criteria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.4 ขอ้ เด่นของภาษาไพธอน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.5 Category และ Application Domains . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.5.1 Web และ Internet Development . . . . . . . . . . . . . . . . . . . . . . . . 16 1.5.2 Database Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.5.3 Desktop GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.5.4 Scientific และ Numeric computation . . . . . . . . . . . . . . . . . . . . . 17 1.5.5 Education . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.5.6 Network programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.5.7 Software builder และ Testing . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.5.8 Game และ 3D Graphics Rendering . . . . . . . . . . . . . . . . . . . . . . 17 1.6 ซอฟต์แวร์ทเี่ ขยี นดว้ ยไพธอน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.7 ตวั อย่างความสำเร็จของไพธอน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 การแสดงผลเบื้องต้น (Printing) 213 การตั้งตัวช่ือแปร และคำสงวน (Reserved word หรือ Keywords) 23 3.1 การตง้ั ตัวช่อื แปร . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2 คำสงวนในการใชง้ าน (Reserved words, Keywords) . . . . . . . . . . . . . . . . . . . 234 การคำนวณทางคณิตศาสตร์ (Arithmetic Mathematics) 25 4.1 การคำนวณพืน้ ฐาน (normal arithmetic operators) . . . . . . . . . . . . . . . . . . . 25 4.2 การคำนวณผา่ นฟังกช์ ัน่ ภายใน (Built-in Math Functions) . . . . . . . . . . . . . . . 26 4.2.1 การหาคา่ สัมบรู ณ์ (absolute value) . . . . . . . . . . . . . . . . . . . . . . . 26 4.2.2 จำนวนทีน่ อ้ ยทส่ี ดุ และมากทสี่ ุดในกลุ่ม (smallest or largest values) . . . . . . 26 4.2.3 กำหนดจำนวนตัวเลขทศนิยม (specified number of digits) . . . . . . . . . . . 27 4.2.4 หาผลรวมทง้ั หมดในชดุ ขอ้ มลู (adds numbers in a sequence.) . . . . . . . . . 27 4.2.5 ชว่ งของข้อมลู ตวั เลข (range of numbers.) . . . . . . . . . . . . . . . . . . . . 27 7
8 สารบญั5 ชนิดของตวั แปร (Data type) 29 5.1 ตัวเลข (Numbers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.1.1 จำนวนเตม็ (Integers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.1.2 จำนวนจริง (Floating-point numbers) . . . . . . . . . . . . . . . . . . . . . 30 5.1.3 จำนวนเชงิ ซอ้ น (Complex Numbers) . . . . . . . . . . . . . . . . . . . . . . 31 5.2 ชนดิ ข้อมูลแบบการรวมกลมุ่ ขอ้ มูล (Collection Data Types) . . . . . . . . . . . . . . . 32 5.2.1 ลสิ ต์ (List) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.2.2 ดิกชันนารี (Dictionary หรือ Groupings of Data Indexed by Name) . . . . . 33 5.2.3 ทบั เบลิ้ (Tuples) และ อนกุ รม (Sequences) . . . . . . . . . . . . . . . . . . . 34 5.2.4 เซต็ (Sets) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.2.5 ฟังกช์ น่ั ที่น่าสนใจเกยี่ วข้องกับลสิ ตแ์ ละดิกชันนารี . . . . . . . . . . . . . . . . . 35 5.3 สายอกั ขระ (String หรือ Array of Characters) . . . . . . . . . . . . . . . . . . . . . 39 5.3.1 ฟงั กช์ ่นั ทนี่ ่าสนใจเก่ียวข้องกบั สายอกั ขระ . . . . . . . . . . . . . . . . . . . . . 426 การเปรียบเทยี บ (Comparisons) 457 นพิ จน์ทางตรรกะศาสตร์ (Boolean Expressions) 47 7.1 AND (และ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 7.2 OR (หรอื ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 7.3 NOT (ไม่) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 ช่วงของการทำงาน (Statement block) และ ชว่ งชวี ติ ของตวั แปร (Life time หรือ Variablescope) 498.1 ช่วงของการทำงาน (Statement block) . . . . . . . . . . . . . . . . . . . . . . . . . . 498.2 ช่วงชวี ิตของตวั แปร (Life time หรือ Variable scope) . . . . . . . . . . . . . . . . . . 499 การควบคุมทศิ ทางของโปรแกรม (Control flow, Flow of Control หรอื Alternatively) 51 9.1 การตดั สินใจ (Decisions, Choice หรอื Selection) . . . . . . . . . . . . . . . . . . . . 51 9.1.1 if Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 9.1.2 switch Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 9.2 การวนทำซ้ำ (Loop) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 9.2.1 while Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 9.2.2 for Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 9.2.3 pass, break, continue และ else Clauses Statements . . . . . . . . . . . . . . 54 9.2.4 do-while Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 9.3 การจัดการความผดิ ปกติของโปรแกรม (Error Checking) . . . . . . . . . . . . . . . . . 55 9.3.1 assert Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 9.3.2 try-except และ raise Statements (Exception handling) . . . . . . . . . . . . 5610 การสร้างฟงั กช์ น่ั (Defined Function) 59 10.1 การรบั ค่าของฟงั ก์ชัน่ , คนื ค่ากลับ และคา่ มาตรฐานของการรับค่า . . . . . . . . . . . . . 60 10.2 ตัวแปรแบบ Global (ท่ัวไป) และ Local (เฉพาะส่วน) . . . . . . . . . . . . . . . . . . 6211 การใสข่ ้อมลู ผ่านคีย์บอร์ด (Input Data from Keyboard) 63
สารบัญ 9ก เรอ่ื งทห่ี ้ามลมื ใน Python 67ข การติดตั้ง Python, wxPython และ Stani’s Python Editor 69 ข.1 การติดตัง้ Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 ข.2 การตดิ ตั้ง wxPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 ข.3 การตดิ ตัง้ Stani’s Python Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75ค อธิบายสว่ นต่าง ๆ พอสงั เขปของโปรแกรม SPE 79 ค.0.1 Sidebar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 ค.0.2 Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 ค.0.3 Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81ง การเขยี น, Debug และสง่ั ให้โปรแกรมทำงาน 85 ง.1 การเขยี นโปรแกรมใน SPE และสง่ั ใหโ้ ปรแกรมทำงาน . . . . . . . . . . . . . . . . . . 85 ง.2 การ Debug โปรแกรม . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86จ ข้อมูลอ้างอิง 87
10 สารบญั
สารบญั รูป1.1 Guido van Rossum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14ข.1 เลอื กดาวน์โหลด Python 2.4 สำหรับ Windows . . . . . . . . . . . . . . . . . . . . . 69ข.2 ขั้นตอนที่ 1 : ดับเบลิ คลก้ิ ทไ่ี ฟลต์ ิดตง้ั . . . . . . . . . . . . . . . . . . . . . . . . . . 70ข.3 ขั้นตอนที่ 2 : เลือก \"Install for all users\" . . . . . . . . . . . . . . . . . . . . . . . . 70ข.4 ขน้ั ตอนท่ี 3 : ให้เลือกท่ีตดิ ตง้ั ท่ี C:\Python24\ . . . . . . . . . . . . . . . . . . . . . 70ข.5 ข้นั ตอนท่ี 4 : เลือกติดต้ังทกุ ตัวเลอื ก . . . . . . . . . . . . . . . . . . . . . . . . . . . 71ข.6 ขน้ั ตอนที่ 5 : ดำเนินการติดต้งั . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71ข.7 ขั้นตอนท่ี 6 : เสร็จส้นิ การตดิ ตง้ั . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71ข.8 เลือกดาวน์โหลด wxPython runtime for Python 2.4 . . . . . . . . . . . . . . . . . . 72ข.9 เลอื กสถานทด่ี าวนโ์ หลด . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72ข.10 ขั้นตอนท่ี 1 : ดบั เบลิ คลก้ิ ที่ไฟลต์ ดิ ตัง้ . . . . . . . . . . . . . . . . . . . . . . . . . . 73ข.11 ข้นั ตอนที่ 2 : หน้าตอ้ นรับการตดิ ตั้งให้ กด Next . . . . . . . . . . . . . . . . . . . . 73ข.12 ขัน้ ตอนท่ี 3 : หน้ายอมรับข้อตกลงให้ กด Yes . . . . . . . . . . . . . . . . . . . . . . 73ข.13 ขน้ั ตอนที่ 4 : หน้าเลอื กสถานท่ีติดต้งั ให้เลอื กตามทโ่ี ปรแกรมไดก้ ำหนดไว้แต่แรก . . . . 73ข.14 ขน้ั ตอนท่ี 5 : หนา้ เลือก component ให้เลอื กทงั้ หมด แล้วกด Next . . . . . . . . . . . 74ข.15 ขั้นตอนที่ 6 : เข้าสู่ขัน้ ตอนการตดิ ต้งั และเมอ่ื เสรจ็ แลว้ ให้เลอื ก checkbox ทงั้ หมดเพ่ือให้ 74 โปรแกรมติดตง้ั ทำการดัดแปลงระบบเพม่ิ เตมิ แล้วกด Finish . . . . . . . . . . . . . . .ข.16 ดาวน์โหลด Stani´s Python Editor Version 0.8.2.a สำหรับ Windows ได้จากลงิ ส์ Source- 75 75 Forge (mirror) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76ข.17 เลอื กสถานทด่ี าวน์โหลด . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76ข.18 ขั้นตอนที่ 1 : ดับเบิลคลิก้ ท่ไี ฟล์ตดิ ตง้ั . . . . . . . . . . . . . . . . . . . . . . . . . . 76ข.19 ขน้ั ตอนที่ 2 : หนา้ ตอ้ นรบั การตดิ ตัง้ ให้ กด Next . . . . . . . . . . . . . . . . . . . . 77ข.20 ขน้ั ตอนท่ี 3 : หน้าเลอื กสถานท่ตี ดิ ตงั้ ใหเ้ ลือกตามทโ่ี ปรแกรมไดก้ ำหนดไว้แต่แรก . . . . 77ข.21 ขน้ั ตอนที่ 4 : เข้าสูข่ ้ันตอนการติดต้ังโดยกด Next เพ่ือเร่มิ การตดิ ตั้ง . . . . . . . . . . .ข.22 ขั้นตอนที่ 5 : เข้าสู่ข้นั ตอนการตดิ ต้ัง และเสรจ็ ส้นิ การติดตงั้ . . . . . . . . . . . . . . .ค.1 เปดิ โปรแกรม Stani’s Python Editor หรือเรียกส้ัน ๆ ว่า SPE ขนึ้ มา . . . . . . . . . . . 79ค.2 หนา้ ตา่ งโปรแกรม Stani’s Python Editor (SPE) . . . . . . . . . . . . . . . . . . . . . 80ค.3 Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81ค.4 Local object browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82ค.5 Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82ค.6 Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 11
12 สารบัญรปูง.1 ส่งั ให้โปรแกรมทำงาน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85ง.2 ผลการทำงาน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85ง.3 การแจง้ Error เพ่อื ใชป้ ระกอบการ Debug . . . . . . . . . . . . . . . . . . . . . . . . 86
บทท่ี 1แนะนำภาษาไพธอน ไพธอน (Python) เป็นภาษาโปรแกรมในลักษณะภาษาอนิ เตอรพ์ รีเตอร์โปรแกรมมิง่ (Interpreted pro-gramming language) ผู้คิดคน้ คือ Guido van Rossum ในปี 1990 ซ่ึงไพธอนเป็น การจดั การชนดิ ของตวั แปรแบบแปรผนั ตามขอ้ มูลที่บรรจุอยู่ (Fully dynamically typed) และใช้การจดั การหน่วยความจำเปน็อัตโนมัติ (Automatic memory management) โดยได้เป็นการพัฒนาและผสมผสานของภาษาอน่ื ๆ ไดแ้ ก่ABC, Modula-3, Icon, ANSI C, Perl, Lisp, Smalltalk และ Tcl และภาษาไพธอนยังเปน็ แนวคดิ ทีท่ ำให้เกิดภาษาใหม่ ๆ ซ่ึงไดแ้ ก่ Ruby และ Boo เป็นต้น ไพธอนนัน้ พัฒนาเป็นโครงการ Open source โดยมีการจัดการแบบไม่หวังผลกำไรโดย Python SoftwareFoundation และสามารถหาข้อมลู และตัวแปรภาษาไดจ้ ากเวบ็ ไซตข์ องไพธอนเอง ท่ี http://www.python.org/ซึ่งในปัจจุบัน (ณ.วันที่ 25 กนั ยายน 2549) ไพธอนได้พฒั นาถงึ รนุ่ ท่ี 2.5 (ออกวันที่ 19 กันยายน 2549) * เอกสารเล่มนี้ยึดตามไพธอนรนุ่ ที่ 2.4.3 (ออกวนั ที่ 29 มนี าคม 2549)1.1 ประวัติ1.1.1 Python 1.0 ไพธอนสรา้ งขึ้นคร้งั แรกในปี 1990 โดย Guido van Rossum ท่ี CWI (National Research Insti-tute for Mathematics and Computer Science) ในประเทศเนเธอรแ์ ลนด์ โดยได้นำความสำเรจ็ ของภาษาโปรแกรมมิง่ ที่ชื่อ ABC มาปรับใช้กบั Modula-3, Icon, C, Perl, Lisp, Smalltalk และ Tcl โดย Dui-do van Rossim ถือวา่ เป็นผรู้ ิเริม่ และคิดคน้ แต่เค้าก็ยังคดิ ว่าผลงานอยา่ งไพธอนนนั้ เป็นผลงานความรู้ที่ทำข้นึ เพือ่ ความสนกุ สนานโดยได้อา้ งองิ งานช้ินนี้ของเขาวา่ เปน็ Benevolent Dictator for Life (BDFL) ซง่ึผลงานที่ถูกเรยี กวา่ เกิดจากความสนุกสนานเหลา่ น้ีนน้ั มักถกู เรยี กวา่ BDFL เพราะมักเกิดจากความไม่ตัง้ ใจและความอยากท่ีจะทำอะไรทเ่ี ป็นอิสระน้ันเอง ซ่งึ คนที่ถกู กล่าวถงึ วา่ ทำในลักษณะแบบนีก้ ็ไดแ้ ก่ Linus Tor-valds ผสู้ ร้าง Linux kernel, Larry Wall ผู้สร้าง Perl programming language และคนอนื่ ๆ อกี มากมาย โดยทีใ่ นไพธอน 1.2 นั้นไดถ้ กู ปลอ่ ยออกมาในปี 1995 โดย Guido ได้กลับมาพฒั นาไพธอนต่อที่ Corpo-ration for National Research Initiatives (CNRI) ท่ี เรสตนั , มลรฐั เวอรจ์ ิเนยี ประเทศสหรฐั อเมรกิ า โดยทใี่ นขณะเดียวกันกไ็ ด้ปลอ่ ยร่นุ ใหม่ ในหมายเลขร่นุ 1.6 ออกมาโดยอยูท่ ่ี CNRI เชน่ กัน ซึง่ หลงั จากปลอ่ ยรนุ่ 1.6 ออกมาแลว้ Guido van Rossum ก็ไดอ้ อกจาก CNRI เพ่ือทำงานใหก้ ารทำธุรกจิพัฒนาซอฟตแ์ วร์แบบเต็มตวั โดยกอ่ นท่ีจะเริ่มทำงานธรุ กิจ เขาก็ได้ทำให้ไพธอนน้ันอยู่บนสญั ญาลขิ สิทธ์ิแบบ General Public License (GPL) โดยท่ี CNRI และ Free Software Foundation (FSF) ได้รวมกันเปิดเผยรหัสโปรแกรมทงั้ หมด เพอ่ื ใหไ้ พธอนนั้นได้ชอ่ื วา่ เปน็ ซอฟตแ์ วร์เสรี และเพ่ือให้ตรงตามขอ้ กำหนด 13
14 แนะนำภาษาไพธอน รปู ที่ 1.1: Guido van Rossumของ GPL-compatible ด้วย (แต่ยงั คงไม่สมบรู ณ์เพราะการพัฒนาในรนุ่ 1.6 น้ันออกมากอ่ นท่ีจะใช้สัญญาลิขสิทธิแ์ บบ GPL ทำใหย้ งั มีบางส่วนทีย่ งั เปดิ เผยไม่ได้) และในปีเดียวกนั น้ันเอง Guido van Russom ก็ได้รับรางวัลจาก FSF ในชอื่ ว่า \"Advancement of FreeSoftware\" โดยในปีนน้ั เองไพธอน 1.6.1 ก็ได้ออกมาเพอ่ื แก้ปญั หาข้อผิดพลาดของตัวซอฟตแ์ วร์และให้เป็นไปตามขอ้ กำหนดของ GPL-compatible license อยา่ งสมบรู ณ์1.1.2 Python 2.0 ในปี 2000 Guido และ Python Core Development team ได้ย้ายการทำงานไป BeOpen.com โดยที่พวกเขาได้ย้ายจาก BeOpen PythonLabs team โดยในไพธอนร่นุ ที่ 2.0 นั้นได้ถกู นำออกเผยแพร่ตอ่ บุคคลทั่วไปจากเวบ็ ไซต์ BeOpen.com และหลงั จากที่ไพธอนออกรุ่นที่ 2.0 ท่ี BeOpen.com แล้ว Guido และนักพฒั นาคนอ่นื ๆ ในทมี PythonLabs กไ็ ดเ้ ขา้ รวมกับทมี งาน Digital Creations ไพธอนร่นุ 2.1 ได้สบื ทอนการทำงานและพัฒนามาจาก 1.6.1 มากกวา่ ไพธอนร่นุ 2.0 และได้ทำการเปล่ยี นชอื่ สัญญาลขิ สทิ ธิ์ใหม่เปน็ Python Software Foundation License โดยท่ีในไพธอนรุ่น 2.1 alphaน้นั ก็ได้เร่มิ ชื่อสัญญาสิขสทิ ธิ์นี้และผู้เปน็ เจ้าของคือ Python Software Foundation (PSF) โดยท่ีเปน็ องค์กรท่ีไมห่ วังผลกำไรเชน่ เดยี วกบั Apache Software Foundation1.1.3 อนาคต ผู้พัฒนาไพธอนมีการประชมุ และถกเถียงกนั ในเร่อื งของความสามารถใหม่ ๆ ในไพธอนรุ่นท่ี 3.0 โดยมีชอื่โครงการว่า Python 3000 (Py3K) โดยท่ีจะหยุดการสนบั สนนุ โค้ดโปรแกรมจากรนุ่ 2.x โดยที่ทำแบบน้ีเพื่อทำการปรบั ปรุงเปลี่ยนแปลงการทำงานของภาษาให้ดียงิ่ ขน้ึ ตามคำแนะนำที่ว่า \"reduce feature duplicationby removing old ways of doing things\" (ลดทอนคณุ สมบตั ิท่ีซำ้ ซ้อนดว้ ยการยกเลกิ เส้นทางทเี่ ดินผ่านมาแล้ว) โดยในตอนนนีย้ งั ไมม่ ตี ารางงานของไพธอน รนุ่ 3.0 แตอ่ ยา่ งใด แต่ Python Enhancement Proposal(PEP) ได้มีการวางแผนไวแ้ ล้ว โดยไดว้ างแผนไว้ดังน้ี • ทำการเพอื่ สว่ นสนบั สนุนชนดิ ตวั แปรให้มากข้ึน
1.2 หลักปรชั ญาของภาษาไพธอน 15• สนบั สนนุ การทำงานของชนดิ ตวั แปรแบบ unicode/str และ separate mutable bytes type• ยกเลิกการสนับสนุนคณุ สมบัติของ classic class, classic division, string exceptions และ implicit relative imports• ฯลฯ1.2 หลกั ปรชั ญาของภาษาไพธอน ไพธอนเป็นภาษาที่สามารถสร้างงานได้หลากหลายกระบวนทัศน์ (Multi-paradigm language) โดยจะมองอะไรท่ีมากกว่าการ coding เพอ่ื นำมาใชง้ านตามรูปแบบเดิม ๆ แต่จะเป็นการนำเอาหลกั การของกระบวนทัศน์ (Paradigm) แบบ Object-oriented programming, Structured programming, Functional program-ming และ Aspect-oriented programming นำเอามาใช้ท้งั แบบเดียว ๆ และนำมาใช้ร่วมกนั ซงึ่ ไพธอนนั้นเป็น ภาษาท่ีมีการตรวจสอบชนิดตัวแปรแบบยืดหยุ่น (dynamically type-checked) และใช้ Garbage col-lection ในการจดั การหนว่ ยความจำ1.3 Language Evaluation Criteria ด้วยความที่ไพธอนน้นั ผสมผสานการสร้างภาษาท่ีสวยงาม ทำใหก้ ารอา่ นหรอื เข้าใจโคด้ (Readability)ต่าง ๆ นั้นทำได้งา่ ย รวมถึงการเขยี นโคด้ (Writability) ท่ีกระชบั และสน้ั ในการเขยี น รวมถงึ มีประสิทธภิ าพทำให้มีเสถียรภาพ (Reliability) สูงข้นึ และมีความรวดเรว็ ในการทำงานอกี ด้วย และในด้านคา่ ใชจ้ ่าย (Cost)ในการพฒั นาซอฟต์แวรจ์ ากไพธอนน้นั ในประเทศไทยนั้นยังต้องใช้ค่าใช้จ่ายคอ่ นข้างสงู เพ่ือใหไ้ ดม้ าซึง่ ซอฟตแ์ วร์ทด่ี ี เพราะผเู้ ชีย่ วชาญท่ีเขียนไพธอนไดม้ เี สถยี รภาพนน้ั ยังมนี อ้ ย ทำใหค้ ่าตวั สำหรับผู้พฒั นาน้นั สงู ตามไปด้วยถึงแม้ว่าเครอ่ื งมือในการพฒั นานนั้ จะฟรี และเป็น Open source ก็ตาม แต่ค่าใชจ้ า่ ยในดา้ นบคุ ลากรนั้นมีมากกวา่ ค่าเครือ่ งมือพฒั นา1.4 ข้อเด่นของภาษาไพธอน 1. ง่ายต่อการเรยี นรู้ โดยภาษาไพธอนมีโครงสร้างของภาษาไม่ซับซอ้ นเข้าใจงา่ ย ซ่ึงโครงสร้างภาษาไพ ธอนจะคลา้ ยกบั ภาษาซีมาก เพราะภาษาไพธอน สร้างข้นึ มาโดยใช้ภาษาซี ทำให้ผู้ท่ีคุ้นเคยภาษาซี อยู่ แลว้ ใช้งานภาษาไพธอนไดไ้ ม่ยาก นอกจากนโ้ี ดยตวั ภาษาเองมคี วามยดื หยนุ่ สูงทำใหก้ ารจดั การกบั งาน ดา้ นขอ้ ความ และ Text File ได้เป็นอยา่ งดี 2. ไมต่ ้องเสยี คา่ ใช้จ่ายใดๆ ท้ังสนิ้ เพราะตวั แปรภาษาไพธอนอยภู่ ายใตล้ ิขสทิ ธ์ิ Python Software Foun- dation License (PSFL) ซ่งึ เปน็ ของ Python Software Foundation (PSF) ซ่งึ มีลกั ษณะคล้ายกับ ลิขสทิ ธ์ิแมแ่ บบอย่าง General Public License (GPL) ของ Free Software Foundation (FSF) 3. ใช้ได้หลายแพลตฟอรม์ ในชว่ งแรกภาษาไพธอนถกู ออกแบบใช้งานกบั ระบบ Unix อยู่ก็จริง แต่ใน ปัจจบุ ันได้มีการพฒั นาตวั แปลภาษาไพธอน ให้สามารถใช้กบั ระบบปฏิบตั ิการอื่นๆ อาทิเชน่ Linux Platform, Windows Platform, OS/2, Amiga, Mac OS X และรวมไปถงึ ระบบปฎบิ ัติการที่ .NET Framework, Java virtual machine ทำงานได้ ซึง่ ใน Nokia Series 60 ก็สามารถทำงานได้เชน่ กนั
16 แนะนำภาษาไพธอน 4. ภาษาไพธอนถกู สรา้ งขึ้นโดยได้รวบรวมเอาส่วนดขี องภาษาต่างๆ เข้ามาไว้ด้วยกัน อาทเิ ชน่ ภาษา ABC, Modula-3, Icon, ANSI C, Perl, Lisp, Smalltalk และ Tcl 5. ไพธอนสามารถรวมการพฒั นาของระบบเข้ากับ COM, .NETและ CORBA objects 6. สำหรบั Java libraries แลว้ สามารถใช้ Jython เพ่ือทำการพัฒนาซอฟต์แวร์จากภาษาไพธอนสำหรับ Java Virtual Machine 7. สำหรับ .NET Platform แลว้ สามารถใช้ IronPython ซง่ึ เปน็ การพฒั นาของ Microsoft เพอ่ื จะทำให้ ไพธอนน้นั สามารถทำงานไดบ้ น .Net Framework ซ่งึ ใช้ช่อื วา่ Python for .NET 8. ไพธอนน้นั สนับสนุน Internet Communications Engine (ICE) และการรวมกนั ของเทคโนโลยีอนื่ ๆ อีกมากมายในอนาคต 9. บางคร้ังนกั พัฒนาอาจจะพบว่าไพธอนไม่สามารถทำงานบางอยา่ งได้ แตน่ ักพฒั นาตอ้ งการให้มันทำงาน ได้ ก็สามารถพฒั นาเพิ่มได้ในรปู แบบของ extension modules ซึ่งอยู่ในรูปแบบของโค้ด C หรือ C++ หรอื ใช้ SWIG หรอื Boost.Python 10. ภาษาไพธอนเปน็ สามารถพัฒนาเปน็ ภาษาประเภท Server side Script คอื การทำงานของภาษาไพ ธอนจะทำงานดา้ นฝง่ั Server แล้วส่งผลลัพธ์กลบั มายัง Client ทำให้มีความปลอดภัยสงู และยงั ใช้ ภาษาไพธอนนำมาพัฒนาเว็บเซอร์วิสไดอ้ กี ดว้ ย 11. ใช้พฒั นาระบบบรหิ ารการสรา้ งเว็บไซต์สำเร็จรูปท่เี รยี กวา่ Content Management Systems (CMS) ซ่ึง CMS ท่ีมีช่อื เสียงมาก และเบือ้ งหลงั ทำงานด้วยไพธอนคือ Plone http://www.plone.org/1.5 Category และ Application Domains ภาษาไพธอนนน้ั จดั อยูใ่ น Category ภาษาทสี่ ามารถสร้างงานไดห้ ลากหลายกระบวนทศั น์ (Multi-paradigmlanguage) โดยรองรับทัง้ Object-oriented programming, Imperative, Functional programming และLogic programming ซ่งึ ไพธอนสามารถนำไปพัฒนาซอฟต์แวร์ประยุกต์ไดม้ ากมาย ไดแ้ ก่1.5.1 Web และ Internet Development ไพธอนนัน้ มีการสนบั สนุนในด้านของ Web Development ในโซลูชนั ระดบั สงู ดว้ ย Zope, mega frame-works อยา่ ง Django และ TurboGears และรวมไปถึง Content Management Systems ขนั้ สงู อยา่ ง Ploneและ CPS จงึ ทำให้ไพธอนนัน้ เปน็ Common Gateway Interface (CGI) ระดบั สงู ที่มีประสิทธิภาพท่ีดีทสี่ ดุตวั หนงึ่ ในตลาด1.5.2 Database Access ไพธอนน้นั สนบั สนุนการเข้าถงึ ขอ้ มลู ในฐานขอ้ มลู ของผู้ผลิตฐานข้อมูลต่าง ๆ มากมาย โดยผ่านทาง ODBCInterfaces และ Database Connection Interface อน่ื ๆ ซ่งึ สามารถทำงานร่วมกบั MySQL, Oracle, MSSQL Server, PostgreSQL, SybODBC และอนื่ ๆ ทจ่ี ะมมี าเพิ่มเติมอีกในอนาคต
1.6 ซอฟต์แวรท์ เ่ี ขียนด้วยไพธอน 171.5.3 Desktop GUI เมอ่ื ไพธอนได้ติดตงั้ ลงบนเคร่อื งของคณุ แลว้ จะมี Tk GUI development library ซึ่งเป็น libraries ที่มีความสามารถเทยี บเท่า Microsoft Foundation Classes (MFC, ซึ่งคลา้ ย ๆ กับ win32 extensions),wxWidgets, GTK, Qt, Delphi และอืน่ ๆ ทำให้สามารถพัฒนาซอฟตแ์ วร์ประยกุ ต์ต่าง ๆ แบบ Graphicuser interface ได้1.5.4 Scientific และ Numeric computation ไพธอนรองรบั การทำงานของนกั วทิ ยาศาสตรใ์ นเร่ืองของทฤษฎกี ารคำนวณ, Bioinformatics และ Physic-s เป็นต้น1.5.5 Education ไพธอนน้ันเป็นภาษาท่ีเหมาะกบั การเรยี นการสอนในวิชา programming อยา่ งมาก โดยสามารถนำไปใช้ในระดบั เบ้อื งตน้ ถึงระดับสูง ซ่งึ Python Software Foundation นัน้ ได้มีหลกั สตู รสำหรับการเรียนการสอนในด้านนี้อยแู่ ลว้ ซ่ึงสามารถนำเอา pyBiblio และ Software Carpentry Course มาเรียนเพือ่ เสริมความร้ไู ด้1.5.6 Network programming เปน็ การเพ่ิมความามารถจาก Web และ Internet Development ไพธอนน้นั สนบั สนนุ ในการเขียนโปรแกรมในระดับต่ำในดา้ นของ network programming ท่ีง่ายตอ่ การพัฒนา sockets และ รวมไปถงึ การทำงานร่วมกับ mudules อย่าง Twisted และ Framework สำหรับ Asyncronous network programming1.5.7 Software builder และ Testing ไพธอนนั้นสนบั สนนุ การพัฒนาซอฟต์แวร์ที่มีการควบคุมการพัฒนาและจัดการระบบทดสอบตา่ ง ๆ โดยใช้เครื่องมือในการพัฒนาท่ีสนบั สนุนการเขยี นโปรแกรมในไพธอนเอง ซ่งึ ตัวไพธอนนั้นไดม้ าพรอ้ มกับ • Scons สำหรับ build โปรแกรม • Buildbot และ Apache Gump ที่ใช้สำหรบั งาน Automated continuous compilation และ Testing • Roundup หรือ Trac สำหรับ bug tracking และ project management1.5.8 Game และ 3D Graphics Rendering ไพธอนนน้ั ได้ถกู ใช้ในตลาดพฒั นาเกมส์ทงั้ เชิงธุรกิจและสมัครเล่น โดยมีการสรา้ ง Framework สำหรับพฒั นา Game บนไพธอนซ่ึงชอื่ ว่า PyGame และ PyKyra ซ่ึงยงั รวมไปถึงการทำ 3D Graphics Renderingท่ีไพธอนมี libraries ทางดา้ นงานน้อี ยูม่ ากมาย1.6 ซอฟตแ์ วรท์ ่เี ขยี นด้วยไพธอน • BitTorrent เป็นการพฒั นาโดยระบบการจัดการไฟล์ BitTorrent, การจัดการ การกระจายตวั ของ Pack- age ข้อมูลใน Tracker และการเขา้ รหสั สว่ นขอ้ มูลตา่ ง ๆ
18 แนะนำภาษาไพธอน • Blender ซอฟตแ์ วร์ open source สำหรับทำ 3D modeling • Chandler ซอฟตแ์ วร์จัดการขอ้ มูลส่วนบุคคล (Personal Information Manager, PIM) โดยมีสว่ น เพ่มิ เตมิ ทั้งงานปฎทิ ิน, อีเมล, ตารางงาน และขอ้ มูลโน็ตต่าง ๆ ซง่ึ ทำงานคลา้ ย ๆ กับ Outlook ของ Microsoft • Civilization IV วีดิโอเกมส์ และยังเป็นเกมสท์ ่ีใช้ boost.python เพ่อื ทำการควบคุมสว่ นประกอบตา่ ง ๆ ภายในเกมส์ ซงึ่ รวมไปถึงรปู แบบ, หน้าตา และเนอ้ื หาของเกมส์ดว้ ย • Mailman หน่งึ ในซอฟต์แวร์ E-Mail mailing lists ท่ีไดร้ ับความนิยมสูงสดุ • Kombilo ระบบจดั การฐานข้อมูลของเกมสโ์ กะ • MoinMoin ระบบ Wiki ทีไ่ ดร้ ับความนิยมสงู ตวั หนึง่ • OpenRPG ระบบเกมส์เสมือนแบบ Role Playing Games ลน Internet • Plone ระบบ Content Management System • Trac ระบบตดิ ตามติดตามขอ้ ผิดพลาดและจัดการข้อมลู ดา้ นการพัฒนาซอฟตแ์ วร์ดว้ ย MoinMoin ท่ี เปน็ wiki และ Subversion เพอื่ ทำระบบ Source version control • Turbogears ระบบพฒั นาซอฟตแ์ วร์ Framework โดยรวมเอา Cherrypy, SQLObject, MochiKit และ KID templates • ViewVC ระบบ Web-based สำหรับจดั การดา้ น CVS และ SVN repositories • Zope ระบบพฒั นาซอฟตแ์ วรบ์ นอนิ เทอรเ์ น็ตแบบ web-application platform • Battlefield 2 เกมส์ First Person Shooter ทไ่ี ดใ้ ชไ้ พธอนในการทำ Configuration scripts • Indian Ocean Tsunami Detector ซอฟต์แวรส์ ำหรบั มือถือเพ่อื แจง้ เตือน Tsunami • EVE Online เกมส์แบบ Multi Massive Online Role Playing Game ซงึ่ เป็นเกมส์ท่ีได้รับอันดบั สูงมากบน MMORPG.com • SPE - Stani’s Python Editor เป็น Free และ open-source สำหรับงานพัฒนาซอฟต์แวร์ด้วยไพ ธอน โดยมีท้ังแบบ Python IDE for Windows, Linux & Mac with wxGlade (GUI designer), PyChecker (Code Doctor) และ Blender (3D) • ฯลฯ1.7 ตวั อยา่ งความสำเร็จของไพธอนIndustrial Light & Magic \"ไพธอนเป็นกุญแจสำหรับการสร้างผลงานที่ดี ถา้ ไม่มีมันแล้วงานอยา่ ง Star Wars: Episode II ก็เปน็ เร่อื งท่ียากมากท่ีจะสำเร็จ ด้วยวิธีการ crowd rendering เพือ่ สง่ ไปทำการ batch processing ในการ compositing video นน้ั เปน็ เร่ืองท่งี า่ ยไปเลยเมอื่ ใชก้ ารพฒั นาระบบด้วยไพ ธอน\" Tommy Burnette, Senior Technical Director, Industrial Light & Magic \"ไพธอนอยู่ทุก ๆ ที่ใน ILM มนั ชว่ ยให้เราสามารถท่ีจะทำงานกบั ภาพกราฟฟกิ ท่ีถูกสร้างสรรค์ได้ง่าย
1.7 ตัวอย่างความสำเร็จของไพธอน 19 และรวดเรว็ \"Philip Peterson, Principal Engineer, Research & Development, Industrial Light & MagicGoogle \"ไพธอนมีความสำคัญตอ่ Google มาก เพราะตั้งแต่เรม่ิ มี Google เราก็ใช้มันสรา้ งระบบของเรา และยังคงเปน็ ส่วนสำคญั จนทกุ วันน้ี โดยในทุก ๆ วนั เหลา่ วิศวะกรของ Google ใช้ไพธอนในการ ทำงานอยู่ตลอดเวลา เพือ่ คน้ หาขอ้ มูลบนโลกของอนิ เทอรเ์ น็ตอยา่ งไมม่ ที สี ้ินสดุ \" Peter Norvig, Di- rector of Search Quality, Google, Inc.NASA \"NASA ใช้ไพธอนในการพฒั นา การจัดการ Model, Integration และ ระบบ Transformation ในงาน CAD/CAE/PDM โดยพวกเราเลอื กไพธอนเพราะมีความสามารถในการสรา้ งงานให้ออกมา ได้อย่างรวดเร็วและมีประสทิ ธิภาพสงู โดยสง่ิ ที่สำคัญคอื code ในการเขยี นนั้นสะอาดและง่ายต่อการ จดั การดูแลในภายหลงั อกี ทงั้ ยงั มี libraries ให้ใช้อย่างมากมายทำการ Integration ของระบบน้นั เปน็ ไปอยา่ งชาญฉลาดและรวดเร็วแถมยังทำระบบท่ีสามารถเชือ่ มตอ่ การกบั ระบบอืน่ ๆ ได้อยา่ งดี ซ่ึงไพ ธอนนั้นตอบโจทย์ของเราได้ท้งั หมด\" Steve Waterbury, Software Group Leader, NASA STEP Testbed
20 แนะนำภาษาไพธอน
บทท่ี 2การแสดงผลเบอื้ งตน้ (Printing) การแสดงผลออกทางหน้าจอของไพธอนน้ันใช้คำส่งั print แลว้ ตามด้วย ’String’ หรือ \"String\" โดยแทนที่ String ด้วยข้อความใด ๆ เชน่ * ในภาษา C/C++, Java, ฯลฯ เคร่อื งหมายที่บอกการจบ ของ คำสงั่ คอื ; (Semi-colon Symbol) แต่Python ใชก้ ารจบบรรทัดแทน>>> print \"Hello, World!\"และได้ผลการทำงานHello, World! ทดสอบการพมิ พ์หลาย ๆ บรรทัด>>> print \"Jack and Jill went up a hill\">>> print \"to fetch a pail of water;\">>> print \"Jack fell down, and broke his crown,\">>> print \"and Jill came tumbling after.\"ผลการทำงานJack and Jill went up a hillto fetch a pail of water;Jack fell down, and broke his crown,and Jill came tumbling after. ซึ่งบางคร้งั เราต้องการพิมพช์ ุดขอ้ ความซำ้ ๆ กนั เราสามารถใช้สัญลกั ษณ์ * (Repetition Symbol) เพอ่ื ทำการพิมพ์ชุดขอ้ ความนั้นได้>>> print \"Hello, World!\"*5ผลการทำงานHello, World!Hello, World!Hello, World!Hello, World!Hello, World! 21
22 การแสดงผลเบื้องตน้ (Printing) * ภาษาไพธอน ใช้ \"#\" บอกจุดเร่ิมต้นของ Comment ไปจนสุดบรรทัด โดย Comment เขยี นไว้เตือนความจำ ไม่ใชส่ ว่ นทเ่ี อาไป Execute Program ตัวอย่าง>>> print \"Foo\"# Test Comment>>> print \"Bar\"ผลการทำงานFooBar
บทท่ี 3การตั้งตัวชือ่ แปร และคำสงวน (Reserved wordหรือ Keywords)3.1 การต้งั ตวั ชอ่ื แปร 1. ข้ึนตน้ ดว้ ยตัวอกั ษรในภาษาองั กฤษ ตามด้วยตวั อกั ษรหรือตัวเลขใดๆ กไ็ ด้ 2. ห้ามเว้นชอ่ งว่าง และห้ามใช้สญั ลกั ษณ์พเิ ศษนอกเหนือจาก underscore ( ) เทา่ น้ัน 3. ตวั อกั ษรของช่อื จะคำนึงถึงความแตกต่างระหว่างอกั ษรตัวพมิ พ์ใหญ่กับตัวพิมพ์เลก็ 4. การตั้งชอื่ มีข้อพึงระวังว่า จะตอ้ งไม่ซ้ำกบั คำสงวน(Reserved words, Keywords) 5. ควรจะต้งั ชือ่ โดยใหช้ ่ือนน้ั มสี ื่อความหมายให้เข้ากับข้อมูล สามารถอ่านและเขา้ ใจได้3.2 คำสงวนในการใชง้ าน (Reserved words, Keywords) and, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if,import, in, is, lambda, not, or, pass, print, raise, return, try, while, yield, as (ไพธอน 2.5) และ with(ไพธอน 2.5) * อ้างอิงจากเอกสารไพธอน รุ่น 2.4.3 และ 2.5 (Python Reference Manual Release 2.4.3, docu-mentation updated on 29 March 2006 and Python Reference Manual Release 2.5, documentationupdated on 19 September 2006) 23
24 การตั้งตวั ชื่อแปร และคำสงวน (Reserved word หรอื Keywords)
บทที่ 4การคำนวณทางคณิตศาสตร์ (ArithmeticMathematics)4.1 การคำนวณพืน้ ฐาน (normal arithmetic operators)ไพธอนนน้ั มสี ญั ลกั ษณ์การคำนวณพ้นื ฐาน (normal arithmetic operators) ซ่งึ ได้แก่ • ** (ยกกำลัง, Exponentiation) • * (คณู , multiplication) • / (หาร, division) • % (หารเอาเศษ, remainder หรอื modulo) • + (บวก, addition) • - (ลบ, subtraction)โดยอนั ดบั ความสำคัญของการคำนวณเหมอื นกับคณิศาสตรโ์ ดยมคี วามสำคัญดงั ตอ่ ไปนี้1. วงเล็บ (parentheses \"()\")2. ยกกำลัง (exponents \"**\" )3. คณู (multiplication \"*\" ), หาร (division \"/\" ) และหารเอาเศษ (remainder/modulo \"%\" )4. บวก (addition \"+\") และ ลบ (subtraction \"-\")ทดสอบการคำนวณไดจ้ ากการคำนวณด้านลา่ งนี้>>> i = 10>>> f = 6.54>>> print i + f16.54 25
26 การคำนวณทางคณิตศาสตร์ (Arithmetic Mathematics) อธบิ ายโปรแกรมด้านบนไดว้ ่า ตวั แปร i ถกู ต้งั คา่ เร่ิมต้นไว้ที่ 10 และตัวแปร f ถกู ตั้งคา่ เริ่มตน้ เป็น 6.54 โดยท่ี i มีชนิดตวั เปน็ integerและ f เป็น float โดยเรานำมาบวกกนั จะได้คำตอบคือ 16.54 ทดสอบการบวกโดยใหน้ ำคา่ ที่ทำการคำนวณสง่ กลับตวั แปรเดมิ จากคำสั่งการทำงานด้านล่างน้ี>>> i = 10>>> i = i + 6>>> i = i / 2>>> print i8 จะเหน็ ว่าชุดคำสงั่ ท่ีใช้มีความยาวกวา่ ปกติ แต่อา่ นง่ายกวา่ ซ่งึ เราสามารถยอ่ รปู การคำนวณตา่ ง ๆ เหลา่ นี้ได้ดงั ตัวอย่างดังดา้ นล่าง>>> i = 10>>> i += 6>>> i /= 2>>> print i8 ซึ่งการยอ่ รปู แบบนีเ้ ปน็ ไปตามรูปแบบดั่งเดิมของภาษา C นนั่ เอง4.2 การคำนวณผา่ นฟังกช์ นั่ ภายใน (Built-in Math Functions)4.2.1 การหาค่าสมั บูรณ์ (absolute value) มีรูปแบบ Function คือ abs(var) เปน็ function ที่ใช้หาค่าสมั บรู ณ์ โดนทีค่ า่ var เปน็ ตวั แปรหรอื จำนวนท่ีต้องการหาคา่>>> print abs(-6.5)6.54.2.2 จำนวนท่นี ้อยท่สี ดุ และมากทส่ี ุดในกลุม่ (smallest or largest values) ฟงั ก์ช่นั หาจำนวนที่นอ้ ยท่ีสดุ มีรูปแบบฟงั กช์ น่ั คือ min(var) เป็นฟงั กช์ นั่ ท่ีใช้ในการหาจำนวนที่น้อยท่ีสุดในกลมุ่ ของชดุ ขอ้ มลู ชนิดต่าง ๆ เชน่ list, set หรอื แม้แตต่ วั เลขทัว่ ไป โดยท่คี ่า var เป็นตวั แปร, จำนวนหรอื ชดุ ของจำนวนทตี่ อ้ งการหาคา่ ฟงั ก์ช่ันหาจำนวนท่ีมากทส่ี ดุ มีรปู แบบฟังกช์ ั่น คือ max(var) เป็นฟงั ก์ช่นั ท่ใี ชใ้ นการหาจำนวนท่ีมากท่สี ดุในกล่มุ ของชุดข้อมูลชนิดต่าง ๆ เชน่ list, set หรอื แม้แต่ตวั เลขทัว่ ไป โดยที่คา่ var เปน็ ตวั แปร, จำนวนหรอืชดุ ของจำนวนทีต่ อ้ งการหาค่า>>> print min(6, 7, 2, 8, 5)2>>> print max(6, 7, 2, 8, 5)
4.2 การคำนวณผ่านฟังกช์ นั่ ภายใน (Built-in Math Functions) 278>>> print min([0, 43.5, 19, 5, -6])0>>> print max([0, 43.5, 19, 5, -6])43.54.2.3 กำหนดจำนวนตัวเลขทศนยิ ม (specified number of digits) มีรูปแบบฟังกช์ น่ั คือ round(var, digits) เปน็ ฟังกช์ ั่นที่ใช้ในการเพ่ิมหรือลดจำนวนตัวเลขทศนิยมท่ีจะนำมาแสดง โดย>>> print round(1234.56789, 2)1234.57>>> print round(1234.56789, -2)1200.04.2.4 หาผลรวมท้งั หมดในชุดขอ้ มลู (adds numbers in a sequence.) มีรปู แบบฟังก์ชนั่ คือ sum(sequence) เปน็ ฟงั ก์ชัน่ ที่ใช้ในการหาผลรวมของชดุ ขอ้ มลู ตวั เลขหนึ่ง ๆ โดยที่ใส่ค่าของชดุ จำนวนเขา้ ไปในรปู แบบของ sequence of numbers เชน่ (1,2,3,4,5) ซ่ึงหมายถึงจำนวนตง้ั แต่ 1- 5 เป็นตน้ ลงไปในฟังก์ชนั่ sum เพื่อทำการคำนวณหาผลรวมของชดุ ข้อมูลดังกล่าว>>> print sum((1, 2, 3, 4, 5))154.2.5 ชว่ งของข้อมูลตวั เลข (range of numbers.) มีรูปแบบฟงั กช์ ัน่ คอื range(start, end [,step]) เปน็ ฟงั ก์ช่นั ท่ีใช้ในการส่งคา่ ช่วงของข้อมลู ตัวเลขท่ีตอ้ งการออกมาเชน่ ตอ้ งการตัวเลขตัง้ แต่ 1 - 500 เราสามารถทำไดต้ ามตัวอย่างด้านล่างนี้>>> print range(1, 6)[1, 2, 3, 4, 5]ซง่ึ เราสามารถนำความสามารถนมี้ าใชร้ ว่ มกบั ฟังก์ชน่ั หาผลรวมทง้ั หมดได้ โดยดงั ตัวอย่างด้านล่างนี้>>> print sum(range(1, 6))15จากตัวอยา่ งท้ังสองน้นั โดยชว่ งของข้อมูลนน้ั คือ 1 - 6 ซึ่งได้ข้อมลู คอื 1, 2, 3, 4, 5 ซึ่งเรานำมาซึ่งสูตรคือm ถึง ( n -1) โดยที่ m และ n คือจำนวนเตม็ บวก และ m มีค่าน้อยกว่า n หรอื บางครง้ั เราอยากเพิ่มค่าทลี ะ2 กส็ ามารถทำไดด้ ้วย>>> print range(1, 6, 2)[1, 3, 5]
28 การคำนวณทางคณติ ศาสตร์ (Arithmetic Mathematics)
บทท่ี 5ชนิดของตวั แปร (Data type) ดังที่เราได้ทราบไปแลว้ ว่าภาษาไพธอนเปน็ ภาษาที่เป็น Interpreter Programming ซง่ึ เราไม่จำเปน็ ตอ้ งสนใจ Data type แต่บางครัง้ การท่ีเรารจู้ กั Data type ตา่ ง ๆ และนำมาใช้งานได้อย่างเหมาะสมทำใหก้ ารเขยี นโปรแกรมมีประสิทธิภาพมากขึ้น โดย Data type ต่าง ๆ น้นั มีจดุ เดน่ ในแบบชนดิ ของตัวมันเอง ซงึ่ ในการแสดงผลการทำงานของขอ้ มูลตา่ ง ๆ ในไพธอนน้นั มีหลากหลายรปู แบบ เราจะมาพูดกนั ในเร่ืองนเี้ ช่นเดยี วกัน โดยในหลาย ๆ ภาษานั้น ๆ เราจำเป็นต้องประกาศชนดิ ตัวแปร (Data type) ก่อน แล้วจึงตัง้ ช่อื ตวั แปร ซ่งึหลาย ๆ ครงั้ สรา้ งความสบั สนในการจดจำ แต่ในภาษาไพธอนนน้ั เราไม่จำเปน็ ตอ้ งประกาศชนิดของตัวแปรกอ่ นการใชง้ านแตอ่ ย่างใด โดยในบทนี้เราจะพดู ถงึ ชนดิ ของตวั แปรต่าง ๆ5.1 ตัวเลข (Numbers)5.1.1 จำนวนเตม็ (Integers)จำนวนเต็มธรรมดา (Plain Integer) Plain Integers มีคำย่อสำหรับเขยี นในโปรแกรมคอื int เป็นการบ่งบอกคณุ สมบัติของตวั แปรท่ีใช้เก็บข้อมลู ตัวเลขแบบจำนวนเตม็ ท่ีเปน็ ตวั เลขแบบ signed integer เก็บขอ้ มูล 32 bits ตั้งแต่ -2147483648 ถึง+2147483647 ทดสอบโดยการพิมพค์ ำส่ังโปรแกรมดงั นี้>>> x = 42>>> type(x)จะไดผ้ ลการทำงานโดยแสดงเปน็ ชนิดของตัวแปรน้นั คอื<type ’int’> * function type(var) เปน็ function ที่ใช้ในการแสดงชนิดของตัวแปรนัน้ ๆ โดยที่ตัวแปร var เป็นชื่อตัวแปรทต่ี ้องการแสดงชนิดของตัวแปรน้นั ๆ ดงั ตวั อยา่ งทไ่ี ดท้ ำด้านบน การทดสอบต่อมาเราจะทำการ casting data ผา่ น function int เพื่อทำการแปลงขอ้ มูลเป็น intergernumbers ตัวอย่างเช่น 29
30 ชนดิ ของตัวแปร (Data type)>>> x = int(\"17\")>>> y = int(4.8)>>> print x, y, x - yผลการทำงาน17 4 13 * function int(var) เปน็ function ที่ใช้ในการแปลงชนิดของขอ้ มูลของตัวแปรอ่นื ๆ มาเป็นชนิดตัวแปรแบบ integer โดยที่ตัวแปร var เปน็ ชอ่ื ตัวแปรทีต่ อ้ งการแปลงชนิดข้อมลู ของตัวแปรนั้น ๆจำนวนเต็มแบบยาว (Long integer) Long integers มีคำย่อสำหรับเขียนในโปรแกรมคอื long เป็นการบง่ บอกคุณสมบัติของตัวแปรท่ีใช้เก็บขอ้ มลู ตวั เลขแบบจำนวนเต็ม ที่เป็นตวั เลขแบบ signed integer เกบ็ ข้อมลู ท่มี ากกวา่ ตัวเลขที่ Integer เกบ็ ได้หรือมีจำนวนทีม่ ากกวา่ - 2147483647 ถึง + 2147483647 นัน้ เอง โดยสามารถใช้คำตัวอกั ษร L ต่อทา้ ยตวั เลขน้ัน ๆ เพื่อบอกวา่ จำนวนน้นั เป็นจำนวน Long Integer เช่น 234187626348292917L หรือ 7L>>> googol = 10 ** 100>>> print googol>>> type(googol)ผลการทำงาน (Operator ** มีความหมายในการคำนวณคือ ยกกำลงั )10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000<type ’long’> ผลจากการทำงานนั้นจะทำการแสดงคา่ ของตัวแปร googol และบอกชนดิ ของตัวแปรวา่ เปน็ long นน้ั เองจำนวนตรรกะ (Boolean) Boolean มีคำยอ่ สำหรบั เขยี นในโปรแกรมคือ bool ความจริงแลว้ ขอ้ มลู ชนิดตรรกะในไพธอนไม่มีอยู่จริงเพราะไม่จำเปน็ ตอ้ งมีนน่ั เอง ส่งิ ที่ไพธอนมีให้นนั้ เป็นเพยี งคา่ คงท่ีเพ่อื ใช้แทนตรรกะ จรงิ และ เท็จ เท่านั้นไดแ้ ก่ • True - แทนคา่ จรงิ มีค่าเปน็ 1 • False - แทนคา่ เท็จ มีค่าเป็น 05.1.2 จำนวนจริง (Floating-point numbers) Floating-point มีคำยอ่ สำหรบั เขียนในโปรแกรมคอื float เป็นการบ่งบอกคุณสมบตั ิของตวั แปรที่ใช้เกบ็ข้อมลู ตวั เลขแบบจำนวนจริงแบบ 64 bit double precision ที่มีความหมายรวบรัดรวมกนั เลยทง้ั float และdouble ในหลายๆ ภาษา แตใ่ นไพธอนจะใช้ float เพยี งอย่างเดียว ซ่ึงมชี ่วงตง้ั แต่ 1.23 ไปจนถึง 7.8 x 10-28
5.1 ตวั เลข (Numbers) 31>>> debt = 7784834892156.63>>> print debt>>> type(debt)ภาษาไพธอนนนั้ จะทำการย่อขนาดของจำนวนให้อยู่ในรูปแบบขนาดยอ่ ทางคณติ ศาสตร์จะได้ผลการทำงานโดยแสดงเป็นชนดิ ของตัวแปรน้นั คือ7.78483489216e+012<type ’float’>โดยมีความหมายว่า 7.78483489216 x 10 12 เราสามารถทำให้จำนวนชนดิ ๆ เปลย่ี นเป็นจำนวนจริงได้โดยใช้ function float>>> x = float(17)>>> y = float(\"4\")>>> print x, y, x - yผลการทำงาน17.0 4.0 13.0 * function float(var) เป็น function ที่ใช้ในการแปลงชนิดของขอ้ มูลของตัวแปรอนื่ ๆ มาเป็นชนิดตัวแปรแบบ floating-point โดยที่ตัวแปร var เปน็ ชือ่ ตัวแปรที่ตอ้ งการแปลงชนิดขอ้ มลู ของตัวแปรนัน้ ๆ5.1.3 จำนวนเชงิ ซอ้ น (Complex Numbers) มีคำยอ่ สำหรับเขยี นในโปรแกรมคอื complex จำนวนเชิงซอ้ นคือเซตท่ีตอ่ เติมจากเซตของจำนวนจรงิ โดยเพมิ่ จำนวน j เข้าไปในตัวเลขจำนวนจริงจนได้เป็น จำนวนจนิ ตภาพ (imaginary number) จนทำให้สมการj2 + 1 = 0 เป็นจริง และหลังจากนนั้ เพม่ิ สมาชกิ ตวั อ่ืนๆ เขา้ ไปจนกระทง่ั เซตท่ีได้ใหม่มีสมบตั ิปดิ ภายใต้การบวกและการคณู จำนวนเชิงซ้อน z ทกุ ตัวสามารถเขยี นอยู่ในรปู x + iy โดยท่ี x และ y เป็นจำนวนจริงโดยเราเรยี ก x และ y วา่ ส่วนจรงิ และส่วนจนิ ตภาพของ z ตามลำดับ เราสามารถนำมาเขยี นเป็นสมการในการเขยี นชดุ คำสงั่ ไดด้ งั นี้>>> imaginary_number = 16j>>> complex_number = 6 + 4j>>> print complex_number(6+4j)>>> print type(complex_number)<type ’complex’> หรอื เราอาจจะไมต่ อ้ งใช้จำนวน j เพอื่ ทำให้ตวั เลขนั้นเป็นจำนวนจินตภาพ ได้จาก function ที่ชื่อวา่ com-plex(real, [imag]) ดงั ตัวอย่างด้านลา่ งน้ี * function complex(real, imag) เป็น function ทใ่ี ช้ในการแปลงชนดิ ของขอ้ มลู ของตัวแปรอนื่ ๆ มาเปน็ชนิดตวั แปรแบบ complex โดยท่ตี วั แปร real เปน็ จำนวนท่เี ป็นจำนวนจรงิ และ imag คือจำนวนจินตภาพ
32 ชนิดของตัวแปร (Data type)>>>complex_number = complex(6, 4)>>>type(complex_number)<type ’complex’>>>>print(complex_number)(6+4j)5.2 ชนิดข้อมลู แบบการรวมกลมุ่ ขอ้ มลู (Collection Data Types)5.2.1 ลสิ ต์ (List) ในไพธอนน้ันชนิดตวั แปรที่ถกู นำมารวมกนั อยู่ในชื่อเดียวกับเลยคอื อารเ์ รย์ (Array) และ ลิสต์ (List)แต่ถา้ นกั พัฒนาตอ้ งการใช้ อารเ์ รย์แบบที่คุน้ เคยจริง ๆ จำเปน็ ต้อง import module array ของไพธอนเขา้ มาซึ่งยงุ่ ยากและทำงานชา้ กว่าทีค่ วรจะเปน็ ลสิ ตม์ ีคำยอ่ สำหรบั เขียนในโปรแกรมคือ list การทำงานของลสิ ต์น้นั เป็นการนำข้อมลู หลาย ๆ ชนดิ มาเรยี งตอ่ กันในลิสต์ของตัวแปรนั้น ๆ ซ่งึ แตกต่างจากอารเ์ รย์ท่ีข้อมลู ท่ีนำมาเรยี งต่อกันตอ้ งเป็นชนิดเดียวกันและนี่คงเป็นสาเหตุท่ีทำให้อาร์เรย์ ถูกตดั ทง้ิ ไปจากชนดิ ของตวั แปรพน้ื ฐานของไพธอนเพราะด้วยเหตผุ ลด้านความยืดหยนุ่ ของชนดิ ของตัวแปรนน้ั เอง โดยลสิ ต์นั้นจะมีขอ้ มูลเรยี งกนั หลาย ๆ ตัว ครอบด้วยเคร่อื งหมายsquare brackets \"[\" และ \"]\" เชน่>>> i = [1, 2, 3, 4, ’Foo’, 5, ’Bar’]>>> print i>>> type(i)ผลทไ่ี ดค้ ือ[1, 2, 3, 4, ’Foo’, 5, ’Bar’]<type ’list’>เราสามารถเข้าถงึ ขอ้ มูลในแต่ละลสิ ตไ์ ด้ ผ่านทางหมายเลขสมาชิก (index key) เช่น>>> print i[6]ผลการทำงานคือBarโดยหมายเลขสมาชกิ เริ่มต้ังแต่ 0 ไปจนถงึ จำนวนข้อมลู ท่ีมีอยู่ในลิสต์ลบด้วยหน่งึ หรอื อธบิ ายให้เห็นภาพก็คือ0, 1, 2, 3, 4 , .... , n - 1เมอ่ื n คอื จำนวนของขอ้ มูลในลสิ ต์ เราสามารถเข้าถึงสมาชิกของ list เป็นกลมุ่ ๆ ได้ โดยใชค้ ำสง่ั : (Colon Symbol) เพอื่ ค่ันระหว่างหมายเลขสมาชกิ ทต่ี อ้ งการ เชน่>>> x = [1, 2, 3, 4, ’Foo’, 5, ’Bar’]>>> print x[3:5]
5.2 ชนดิ ข้อมูลแบบการรวมกลมุ่ ขอ้ มลู (Collection Data Types) 33ผลการทำงาน[4, ’Foo’] เราสามารถเลือกสมาชกิ บางตวั อย่างมเี ง่ือนไขได้ เชน่>>> y = [10, 3, 5, 25, 7, 9]>>> z = [x for x in y if x >= 9]>>> print zผลการทำงานคอื[10, 25, 9]จากชดุ คำสัง่ ด้านบนน้ันเป็นการเลอื กสมาชิกภายในลสิ ตท์ ม่ี ีค่ามากกวา่ หรือเทา่ กับ 9 นั่นเอง5.2.2 ดิกชนั นารี (Dictionary หรือ Groupings of Data Indexed by Name) ดกิ ชันนารี (Dictionary หรอื Groupings of Data Indexed by Name) มีคำย่อสำหรบั เขยี นในโปรแกรมคอื dict เปน็ อนุกรมอกี อันหน่ึง มีสภาพเหมือนอาเรย์ ที่มีสมาชิกท้ัง keys และ value โดยที่ นนั้ จะใช้ชือ่อา้ งอิงสมาชกิ (associated key) แทนการใช้หมายเลขสมาชกิ (index key) ซ่งึ จะซ้ำกันไม่ได้ (ถ้ากำหนดค่าซ้ำ มนั จะลบค่าเก่า และใช้ค่าใหม่แทน) โดยใช้การจดั เรยี งข้อมูลและแกไ้ ขค่าไม่ได้ (จึงสามารถใช้ tuple เปน็keys ได้ ถ้าชนดิ ของขอ้ มลู สมาชกิ เป็นชนดิ เดยี วกัน แต่ใช้ list เปน็ keys ไม่ได้) แต่ลบ keys:value ได้ เวลาเรียกขอ้ มลู value จะค้นจาก keys ถ้าคน้ ไม่พบจะเกิดข้อผิดพลาด>>> i = {’first’:’alpha’,’last’:’omega’}>>> print i>>> print i[’first’]>>> type(i)ผลการทำงานคือ{’last’: ’omega’, ’first’: ’alpha’}’alpha’<type ’dict’>โดยการเขา้ ถึงข้อมลู ของดิกชนั นารี น้ันสามารถทำได้โดยการอ้างอิงจากชอื่ อา้ งอิงสมาชิก ด่ังในตวั อย่างข้างต้นนั้นไดอ้ า้ งองิ ถงึ first ด้วยรปู แบบ>>> print i[’first’]เราก็จะไดข้ ้อมูล ’alpha’ ออกมา โดยเราสามารถใส่สมาชกิ ลงไปไดเ้ รือ่ ย ๆ จากตวั อย่างต่อไปนี้>>> menus_specials = {}>>> menus_specials[“breakfast”] = “canadian ham”>>> menus_specials[“lunch”] = “tuna surprise”>>> menus_specials[“dinner”] = “Cheeseburger Deluxe”>>> print menus_specials[’breakfast’]ผลการทำงานcanadian ham
34 ชนิดของตวั แปร (Data type)5.2.3 ทบั เบล้ิ (Tuples) และ อนกุ รม (Sequences) ทบั เบ้ิล (น้องลสิ ต,์ Tuples) มีคำยอ่ สำหรบั เขยี นในโปรแกรมคอื tuple ขอ้ มูลจะอยู่ภายในวงเล็บ () แต่ตอนกำหนดคา่ ถ้าอยู่โดดๆ อาจไม่ใส่วงเลบ็ กไ็ ด้ โดยใชห้ ลักคล้ายกับลิสต์ (แต่ไมเ่ หมือนกนั ทง้ั หมด) เพียงแต่เราสามารถนำลสิ ตห์ ลาย ๆ ลิสตม์ าบรรจลุ งในลิสต์เดยี วกันเองไดโ้ ดยไมต่ ้องแยกตัวแปร เช่น>>> t = 12345, 54321, ’hello!’>>> type(t)<type ’tuple’>>>> t[0]12345>>> t(12345, 54321, ’hello!’)>>> # Tuples may be nested:... u = t, (1, 2, 3, 4, 5)>>> u((12345, 54321, ’hello!’), (1, 2, 3, 4, 5)) แต่สมาชกิ ในทับเบ้ลิ เปล่ยี นค่าไม่ได้ ซึ่งเหมือนกบั เหมือนสตรีง ไม่เหมอื นลสิ ท์ ซึง่ การกำหนดค่าให้ทับเบลิ้ ที่มีสมาชิกเดียว ยุง่ ยากขน้ึ เล็กน้อย เพราะต้องใช้ \",\" ช่วย>>> empty = () # <-- note trailing comma>>> singleton = ’hello’,>>> len(empty)0>>> len(singleton)1>>> singleton(’hello’,) การกำหนดคา่ ให้ tuple เช่น t = 12345, 54321, ’hello!’ เรียกว่าการแพค็ (packing) ใชไ้ ด้กับ tupleอย่างเดยี ว สว่ นการกำหนดค่าแบบยอ้ นกลับ เรยี กวา่ การ อันแพค็ (unpacking) อนั นใี้ ช้ไดก้ ับทกุ อนกุ รม คือทง้ั ลิสท์ และทูเปลิ * function len(var) เปน็ function ที่ใช้ในการหนา้ จำนวนสมาชิก, ความยาวของสายอักขระ และกลมุ่ของข้อมลู ต่าง ๆ โดยท่ี var น้ันคอื ช่ือของตัวแปรที่เราต้องการหานั้นเอง>>> x, y, z = t * ในตวั อย่างนี้ t ต้องมีสมาชกิ อย่างนอ้ ย 3 คา่ มิเช่นนน้ั จะเกดิ ขอ้ ผดิ พลาด เนือ่ งจากไม่สามารถให้ค่าได้กบั 3 ตัวแปรที่ต้องการส่งคา่ ไปให้5.2.4 เซต็ (Sets) เซ็ต เปรยี บเสมือนส่วนขยายของลสิ ท์(และสตรงิ ดว้ ย) และจะไมม่ สี มาชกิ ทม่ี คี า่ ซำ้ กัน ใชป้ ระโยขน์เหมือนกบั เรอ่ื งเซ็ทในวชิ าคณติ ศาสตร์
5.2 ชนิดขอ้ มูลแบบการรวมกลมุ่ ขอ้ มูล (Collection Data Types) 35 มีคำยอ่ สำหรบั เขยี นในโปรแกรมคือ set แต่การที่จะได้ชนดิ ขอ้ มูลแบบเซ็ตนน้ั ตอ้ งทำผา่ น function setเพื่อให้ไดเ้ ซ็ตออกมา ซ่งึ สว่ นมากแล้วจะใช้ List มาทำการแปลงชนดิ ตัวแปรเปน็ เซ็ตอีกที ดังตัวอย่างด้านล่าง * function set(var) เป็น function ที่ใช้ในการแปลงชนิดของข้อมลู ของตัวแปรอ่นื ๆ มาเปน็ ชนดิ ตัวแปรแบบ set โดยทต่ี ัวแปร var เปน็ ชื่อตัวแปรท่ตี ้องการแปลงชนดิ ขอ้ มูลของตัวแปรนัน้ ๆ>>> basket = [’apple’, ’orange’, ’apple’, ’pear’, ’orange’, ’banana’]>>> fruit = set(basket) # create a set without duplicates>>> type(fruit)<type ’set’>>>> fruitset([’orange’, ’pear’, ’apple’, ’banana’])>>> ’orange’ in fruit # fast membership testingTrue>>> ’crabgrass’ in fruitFalse>>> # Demonstrate set operations on unique letters from two words...>>> a = set(’abracadabra’)>>> b = set(’alacazam’)>>> a # unique letters in aset([’a’, ’r’, ’b’, ’c’, ’d’])>>> a - b # letters in a but not in bset([’r’, ’d’, ’b’])>>> a | b # letters in either a or bset([’a’, ’c’, ’r’, ’d’, ’b’, ’m’, ’z’, ’l’])>>> a & b # letters in both a and bset([’a’, ’c’])>>> a ^ b # letters in a or b but not bothset([’r’, ’d’, ’b’, ’m’, ’z’, ’l’])5.2.5 ฟังกช์ ัน่ ที่น่าสนใจเกีย่ วข้องกบั ลิสต์และดิกชนั นารี * การเรยี กใช้ฟังค์ช่นั ของลสิ ต์และดิกชนั นารีนัน้ ทำคล้าย ๆ กบั การเรียกใชเ้ มธอดในภาษา Java เช่น>>> i = [1,2,3,4]>>> print i.pop()4>>> j = {’first’:’alpha’,’last’:’omega’}>>> print j.pop(’first’)alpha
36 ชนดิ ของตัวแปร (Data type)ฟังก์ชัน่ pop - [ลิสต/์ ดกิ ชันนาร]ี รปู แบบฟงั ก์ชน่ั Object.pop([key]) ในลิสต์นน้ั เราไม่จำเปน็ ตอ้ งกำหนดหมายเลขสมาชกิ (index key)ก่อนการ pop เพราะเมธอดจะนำค่าบนสดุ มาให้เรา แต่ถ้าตอ้ งการ pop ในหมายเลขสมาชกิ ที่ต้องการก็เพยี งแต่ใสห่ มายเลขสมาชิกเทา่ นน้ั แต่ในดิกชันนารเราจำเป็นต้องกำหนดชอ่ื อ้างอิงสมาชิก (associated key)กอ่ นการ pop เพราะมเิ ช่นนนั้ เมธอดจะไมส่ ามารถนำคา่ ของสมาชิกนน้ั ๆ มาใหเ้ ราได>>> i = [1,2,3,4]>>> print i.pop()4>>> j = {’first’:’alpha’,’last’:’omega’}>>> print j.pop(’first’)alphaฟงั ก์ชน่ั append - [ลิสต์] รปู แบบฟังกช์ น่ั Object.append([object]) เปน็ ฟงั กช์ ั่นท่ีใช้ในการเพ่มิ ขอ้ มลู สมาชิกลงไปในลิสต์โดยจะนำไปต่อท้ายลิสตเ์ สมอ>>> i = [1,2,3,4]>>> print i.pop()4>>> i.append(5)>>> print i[1,2,3,5]ฟงั ก์ช่ัน insert - [ลิสต]์ รูปแบบฟังก์ชั่น Object.insert(index, object) เปน็ ฟังกช์ ั่นท่ีใช้ในการเพิ่มข้อมลู สมาชกิ ลงไปในลสิ ต์โดยจะนำไปใส่ในลำดับสมาชิกทเี่ ราตอ้ งการ>>> print i[1, 3]>>> i.insert(4, 5)>>> print i[1, 3, 5]>>> i.insert(2, 6)>>> print i[1, 3, 6, 5]ฟงั ก์ชน่ั count - [ลสิ ต์] รปู แบบฟงั กช์ นั่ Object.count([object]) เป็นฟังกช์ นั่ ท่ใี ชใ้ นการนบั ข้อมลู สมาชิกที่ตอ้ งการคน้ หา>>> i = [1,2,3,4]>>> print i.count(5)
5.2 ชนดิ ข้อมลู แบบการรวมกลมุ่ ข้อมลู (Collection Data Types) 370>>> print i.count(4)1ฟงั กช์ ่ัน index - [ลิสต]์ รปู แบบฟังก์ช่นั Object.index(value, [ start , stop ]) เปน็ ฟังก์ชน่ั ท่ีใชใ้ นการหาคา่ ของหมายเลขสมาชกิ(index key) วา่ ข้อมลู ทเี่ ราตอ้ งการนนั้ อยูท่ ห่ี มายเลขสมาชิกท่เี ทา่ ใด>>> i = [1,2,3,4]>>> print i.index(4)3>>> print i.index(1)0ฟังก์ชั่น extend - [ลสิ ต]์ รปู แบบฟงั ก์ชั่น Object.extend(list|dict) เปน็ ฟังกช์ ัน่ ทีใ่ ชใ้ นเพิม่ สมาชิกทัง้ หมดจากอีกลสิ ตห์ รอื ดกิ ชันนารี จากตัวแปรอื่น ๆ มาไว้ท่ตี ัวแปรตง้ั ตน้>>> j = {’last’: ’omega’}>>> i = [1,2,3,4]>>> i.extend(j)>>> print i[1, 2, 3, 4, ’last’]ฟงั กช์ ่ัน remove - [ลิสต์] รูปแบบฟังก์ชนั่ Object.remove(value) เปน็ ฟงั กช์ ั่นท่ีใช้ในการลบคา่ ท่ีกำหนดไว้ในพารามเิ ตอร์ออกไปจากลสิ ต์>>> print i[1, 2, 3, 4, ’last’]>>> i.remove(1)>>> print i[3, 6, 5, ’last’]ฟังกช์ นั่ sort - [ลสิ ต]์ รูปแบบฟงั ก์ช่นั Object.sort() เป็นฟังก์ชั่นที่ใช้ในการจดั เรียงข้อมูล (sort) ภายในลสิ ต์โดยสามารถที่จะจดั เรยี งไดท้ งั้ ตามหมายเลขสมาชิก หรอื จัดเรียงตามข้อมูลของสมาชิก>>> a = [5, 2, 3, 1, 4]>>> a.sort()>>> print a[1, 2, 3, 4, 5]
38 ชนิดของตัวแปร (Data type)>>> i = [’a’,’r’,’b’,’i’,’z’]>>> print i[’a’, ’r’, ’b’, ’i’, ’z’]>>> i.sort()>>> print i[’a’, ’b’, ’i’, ’r’, ’z’]ฟังกช์ ั่น reverse - [ลสิ ต]์ รปู แบบฟงั กช์ นั่ Object.reverse() เปน็ ฟังกช์ ั่นทใี่ ช้ในการจัดเรียงข้อมลู (sort) ภายในลสิ ตแ์ บบยอ้ นกลบั>>> a = [5, 2, 3, 1, 4]>>> a.sort()>>> print a[1, 2, 3, 4, 5]>>> i.reverse()>>> print i[5, 4, 3, 2, 1]ฟงั ก์ชน่ั clear - [ดกิ ชนั นารี] รูปแบบฟงั กช์ ั่น Object.clear() เป็นฟังกช์ ัน่ ที่ใชใ้ นการลบข้อมลู ภายในดกิ ชนั นารที ้งั หมด>>> j = {’first’:’a’, ’second’:’b’}>>> print j{’second’: ’b’, ’first’: ’a’}>>> j.clear()>>> print j{}ฟงั ก์ชั่น get - [ดกิ ชันนาร]ี รปู แบบฟังก์ช่ัน Object.get(key) เป็นฟงั ก์ช่นั ท่ใี ช้ในเรียกขอ้ มลู จากชือ่ อ้างองิ สมาชิกภายในดกิ ชนั นารี>>> j = {’first’:’a’, ’second’:’b’}>>> print j{’second’: ’b’, ’first’: ’a’}>>> j.get(’first’)’a’ฟงั กช์ น่ั has key - [ดกิ ชันนาร]ี รปู แบบฟังกช์ ่ัน Object.has key(key) เปน็ ฟังก์ช่ันทใ่ี ชใ้ นการตรวจสอบชือ่ อา้ งอิงสมาชกิ (associated key)ว่ามีอยู่หรอื ไม่
5.3 สายอกั ขระ (String หรือ Array of Characters) 39>>> j = {’first’:’a’, ’second’:’b’}>>> print j{’second’: ’b’, ’first’: ’a’}>>> j.has_key(’first’)True>>> j.has_key(’last’)Falseฟงั ก์ชน่ั items - [ดกิ ชนั นารี] รูปแบบฟังก์ชั่น Object.items(key) เป็นฟังกช์ นั่ ทีใ่ ช้ในการแสดงรายการชอ่ื อ้างองิ สมาชิกและข้อมูลทง้ั หมดในดิกชันนารี>>> j = {’first’:’a’, ’second’:’b’}>>> print j{’second’: ’b’, ’first’: ’a’}>>>>>> j.items()[(’second’, ’b’), (’first’, ’a’)]ฟังก์ชน่ั keys - [ดิกชนั นาร]ี รูปแบบฟงั กช์ ั่น Object.keys() เป็นฟังกช์ ั่นที่ใช้ในการแสดงรายการชอื่ อา้ งอิงสมาชิกทงั้ หมดในดิกชันนารี>>> j = {’first’:’a’, ’second’:’b’}>>> print j{’second’: ’b’, ’first’: ’a’}>>>>>> j.keys()[’second’, ’first’]ฟงั กช์ นั่ values - [ดกิ ชันนารี] รูปแบบฟังกช์ นั่ Object.values() เป็นฟังก์ชัน่ ทีใ่ ชใ้ นการแสดงรายการข้อมลู ทัง้ หมดในดิกชนั นารี>>> j = {’first’:’a’, ’second’:’b’}>>> print j{’second’: ’b’, ’first’: ’a’}>>>>>>>>> j.values()[’b’, ’a’]5.3 สายอักขระ (String หรอื Array of Characters) สายอักขระ (Strings) เป็นการเรียงตัวของอกั ขระมาตอ่ กันมากกวา่ 1 ตวั จนกลายเปน็ เสน้ สาย หรือเรยี กอกี อย่างวา่ ลำดบั ของอกั ขระ (Array of Characters) โดยเราสามารถกำหนดค่าตวั แปรได้โดยใช้เคร่ืองหมาย
40 ชนดิ ของตัวแปร (Data type)single quotation (’.....’) หรอื double quotation (\" .... \") ครอบอักขระ, สายอกั จระ หรือแมแ้ ตต่ ัวเลข และรวมไปถงึ สัญลกั ษณ์พเิ ศษต่าง ๆ โดยในไพธอนน้นั จะเก็บขอ้ มูลแบบ 8-bit strings หรือ Unicode objectsขึ้นอยกู่ ับข้อมลู ที่จดั เก็บอย่ใู นขณะนน้ั ดังตัวอย่างตอ่ ไปน้ี>>> print \"Hello, World!\"และได้ผลการทำงานHello, World! ซ่งึ บางคร้งั เราต้องการพิมพ์ค่าของตวั แปรนนั้ ไปพร้อมกบั ข้อความใน function print นัน้ สามารถใช้สัญลกั ษณ์, (Concatenation Symbol) ดา้ นหลงั ชดุ ขอ้ ความนน้ั ๆ กอ่ น แล้วจึงพมิ พช์ อ่ื ตัวแปรน้นั ๆ ตอ่ ทา้ ย>>> i = 5>>> print \"14 / 3 = \",14 / 3>>> print \"14 % 3 = \",14 % 3>>> print \"14.0 / 3.0 =\",14.0 / 3.0>>> print \"hello\", \"hello\", iผลการทำงาน14 / 3 = 414 % 3 = 214.0 / 3.0 = 4.66666666667hello hello 5 ซ่งึ การใช้ Concatenation Symbol นัน้ สามารถทจ่ี ะนำมาประยุกตใ์ ชง้ าน อนื่ ๆ ได้อกี นอกจาก print แต่ถา้ ตอ้ งการใหข้ อ้ ความนน้ั ตอ่ กนั ใหใ้ ชส้ ัญลักษณ์ + (String Concatenation Symbol) เพ่ือเช่ือมข้อความแตล่ ะชุดเขา้ ด้วยกัน>>> print \"Jack and Jill went up a hill\" + \"to fetch a pail of water;\" +\"Jack fell down, and broke his crown,\" + \"and Jill came tumbling after.\"ผลการทำงานJack and Jill went up a hill to fetch a pail of water;Jack fell down, and broke his crown, and Jill cametumbling after. ซงึ่ การใสข่ อ้ มูลภายใตเ้ ครอ่ื งหมาย double quotation น้นั สามารถใช้สญั ลกั ษณพ์ เิ ศษได้ดังนี้
5.3 สายอกั ขระ (String หรอื Array of Characters) 41\newline ไม่สนใจ (Ignored)\\ เครอ่ื งหมาย Backslash ( \) เคร่ืองหมาย Single quote (’)\’ เคร่ืองหมาย Double quote (\")\\" ASCII Bell (BEL)\a ASCII Backspace (BS)\b ASCII Formfeed (FF)\f ASCII Linefeed (LF)\n ASCII Carriage Return (CR)\r ASCII Horizontal Tab (TAB)\t ASCII Vertical Tab (VT)\v โดยเปน็ สญั ลักษณ์พเิ ศษท่เี ราเจอกันอยใู่ นหลาย ๆ ภาษา และในบางครัง้ การตอ่ สายอกั ขระ น้นั อาจจะไม่สะดวกการใช้ String formatting operator \"%\" เข้ามาช่วยจะทำให้การนำตัวแปรตา่ ง ๆ มาใสใ่ นสายอักขระทำไดง้ า่ ยมากขึ้น เช่น>>> state = ’California’>>> ’It never rains in sunny %s.’ %stateจะได้ผลการทำงานคือ’It never rains in sunny California.’ โดยท่ี %s น้นั เราสามารถแทนด้วยตวั อักษร s เปน็ ตัวอกั ษรอน่ื ๆ ได้ตามความเหมาะกับตัวแปรที่เราจะนำมาผสมลงในสายอกั ขระ ซง่ึ มีดังนี้ d Signed integer decimal i Signed integer decimal o Unsigned octal u Unsigned decimal x Unsigned hexidecimal (lowercase) X Unsigned hexidecimal (uppercase) e Floating point exponential format (lowercase) E Floating point exponential format (uppercase) f Floating point decimal format F Floating point decimal format g Same as \"e\" if exponent is greater than -4 or less than precision, \"f\" otherwise G Same as \"E\" if exponent is greater than -4 or less than precision, \"F\" otherwise c Single character (accepts integer or single character string) r String (converts any python object using repr()) s String (converts any python object using str())
42 ชนิดของตัวแปร (Data type)d = 4.5000print ’It never rains in sunny %d.’ %dprint ’It never rains in sunny %i.’ %dprint ’It never rains in sunny %o.’ %dprint ’It never rains in sunny %u.’ %dprint ’It never rains in sunny %x.’ %dprint ’It never rains in sunny %X.’ %dprint ’It never rains in sunny %e.’ %dprint ’It never rains in sunny %E.’ %dprint ’It never rains in sunny %f.’ %dprint ’It never rains in sunny %F.’ %dprint ’It never rains in sunny %g.’ %dprint ’It never rains in sunny %G.’ %dprint ’It never rains in sunny %c.’ %int(d)print ’It never rains in sunny %r.’ %dprint ’It never rains in sunny %s.’ %dผลการทำงานIt never rains in sunny 4.It never rains in sunny 4.It never rains in sunny 4.It never rains in sunny 4.It never rains in sunny 4.It never rains in sunny 4.It never rains in sunny 4.500000e+000.It never rains in sunny 4.500000E+000.It never rains in sunny 4.500000.It never rains in sunny 4.500000.It never rains in sunny 4.5.It never rains in sunny 4.5.It never rains in sunny L.It never rains in sunny 4.5.It never rains in sunny 4.5.5.3.1 ฟังก์ชน่ั ท่ีน่าสนใจเกย่ี วขอ้ งกบั สายอกั ขระฟังก์ชัน่ find รูปแบบฟงั กช์ นั่ Object.find((sub[, start[, end]]) เปน็ ฟังก์ช่ันที่ใช้ในการคน้ หาคำในสายอักขระโดยจะคนื ค่าใน หมายเลขสมาชกิ (index key) ของสายอักขระนนั้ ๆ ทเ่ี จอเป็นตวั แรก แตถ่ ้าไมเ่ จอจะส่งค่า -1 กลบัมา
5.3 สายอักขระ (String หรอื Array of Characters) 43>>> s = \"windows\">>> s.find(’dow’)3ฟงั กช์ นั่ upper รปู แบบฟงั กช์ ่นั Object.upper() เป็นฟังก์ชนั่ ทีใ่ ชใ้ นการทำให้ตัวอักษรเปลยี่ นเป็นตวั ใหญ่ (ในภาษาอังกฤษ)>>> s = \"windows\">>> s.upper()WINDOWSฟงั กช์ ัน่ lower รปู แบบฟังกช์ น่ั Object.lower() เป็นฟังก์ช่ันทใี่ ชใ้ นการทำให้ตวั อกั ษรเปล่ียนเปน็ ตัวเล็ก (ในภาษาองั กฤษ)>>> s = \"WINDOWS\">>> s.lower()windowsฟังกช์ น่ั replace รูปแบบฟังก์ช่นั Object.replace(old, new) เป็นฟังก์ชนั่ ที่ใช้ในการค้นหาคำท่ีกำหนดและแทนท่ีคำนั้นดว้ ยคำท่กี ำหนดให้>>> s = ’The happy cat ran home.’>>> s.replace(’cat’, ’dog’)’The happy dog ran home.’
44 ชนดิ ของตวั แปร (Data type)
บทท่ี 6การเปรยี บเทยี บ (Comparisons) ในภาษาไพธอนนั้นมีการเปรยี บเทยี บในเชิงคณติ ศาสตร์ต่าง ๆ เป็นพน้ื ฐานอยู่แล้ว แต่บางอย่างก็มีท่ีไม่เหมือนกับภาษาอ่นื ๆ คอื มีการเพิ่มเตมิ การเปรียบเทยี บในดา้ นของกลมุ่ ข้อมลู และขอ้ มูลที่เหมอื นกัน โดยได้เพมิ่ การเปรียบเทียบแบบ \"in\" และ \"is\" เขา้ มาเพอื่ เปรียบเทียบกับกล่มุ ข้อมูล ส่วนใหญ่การใช้ \"is\"มักใช้ในการเปรยี บเทียบดา้ นตัวอักขระและสายอักขระมากกว่าเพราะสอ่ื ความหมายมากกวา่ ใช้ \"==\" ในการเปรยี บเทียบ โดยเมอื่ มีการเปรยี บเทียบแล้วเราจะได้ผลออกมาคอื ค่าทางตรรกะ หรอื Boolean value ซ่งึ ในภาษาไพธอนนัน้ คือ True แทนดว้ ยเป็นจริง และ False แทนด้วยเปน็ เทจ็ และเรายงั สามารถใชต้ ัวเลขแทนคา่ ดังกล่าวได้ด้วย 0 คอื False และ 1 คอื True นน้ั เอง โดยคา่ ท่ีได้นัน้ มาจากการทำการทดสอบทางตรรกศาสตร์ในเชงิเปรยี บเทียบคา่ ท้ังสองขา้ งของข้อมูล Operator ความหมาย < เปรียบเทียบค่าทางดา้ นซ้ายของเครื่องหมาย นอ้ ยกว่า ค่าทางด้านขวาหรือไม่ <= เปรียบเทยี บค่าทางด้านซา้ ยของเครื่องหมาย นอ้ ยกว่าหรอื เทา่ กับ ค่าทางด้านขวา หรือไม่ > เปรยี บเทยี บค่าทางดา้ นซ้ายของเครื่องหมาย มากกว่า ค่าทางด้านขวาหรอื ไม่ >= เปรียบเทียบคา่ ทางดา้ นซ้ายของเครอื่ งหมาย มากกวา่ หรือเทา่ กบั คา่ ทางดา้ นขวาหรอื ไม่ == เปรียบเทียบคา่ ทางด้านซา้ ยของเครื่องหมาย เทา่ กับ ค่าทางด้านขวาหรอื ไม่ != เปรียบเทยี บคา่ ทางดา้ นซ้ายของเครื่องหมาย ไมเ่ ทา่ กบั คา่ ทางดา้ นขวาหรือไม่ <> เปรยี บเทยี บค่าทางดา้ นซา้ ยของเครอ่ื งหมาย ไม่มีทางเทา่ กับ ค่าทางดา้ นขวาหรอื ไม่ in เปรียบเทยี บค่าทางด้านซ้ายของเครอื่ งหมายอยใู่ นกลมุ่ ข้อมลู ในกลมุ่ ข้อมลู ด้านขวาหรือไม่ is เปรยี บเทยี บคา่ ทางด้านซ้ายของเครอ่ื งหมาย เหมือนกบั คา่ ทางดา้ นขวาหรอื ไม่ ตวั อย่าง True >>> 0 != 1>>> 1 < 2 TrueTrue >>> x = [1,2,3,4]>>> 2 <= 2 >>> 1 in xTrue True>>> 2 > 0 >>> 1 is 1True True>>> 3 >= 3True 45>>> 0 == 0
46 การเปรยี บเทียบ (Comparisons)
บทที่ 7นิพจนท์ างตรรกะศาสตร์ (Boolean Expressions) การทำการเปรยี บเทยี บนน้ั เมื่อได้ค่าจากการเปรียบเทยี บซ่งึ เปน็ ค่าทางตรรกะมาหน่งึ ค่า โดยทว่ั ไปแลว้ ก็เพยี งพอตอ่ การนำไปใช้ในการทำสอบทางตรรกศาสตร์ (Condition) อยู่แลว้ แต่บางครัง้ แล้วเรามกั นำค่าต่างๆ มาเชอ่ื มกนั เพ่ือให้ได้นพิ จน์ท่ีมีความหมายเชอื่ มโยงกันเพ่อื ให้ได้ความหมายที่ดีมากข้นึ เมอื่ มีการทดสอบทางตรรกศาสตร์มากกวา่ 1 ชดุ การทดสอบ และเปน็ การชว่ ยใหก้ ารเขยี นโปรแกรมนนั้ สัน้ ลง โดยในไพธอนนัน้ มีนิพจนท์ างตรรกะศาสตร์ตามพ้นื ฐานภาษาทว่ั ไปคือ AND, OR และ NOT โดยเป็นการเปรยี บเทียบจากผลของการเปรียบเทยี บในเชิงคณิตศาสตรท์ ่ไี ดอ้ ยู่กอ่ นแล้วมาเปรยี บเทยี บในเชิงตรรกศาสตร์อีกรอบหน่งึ7.1 AND (และ)มีคีย์เวิรด์ คือ and จะประมวลผลประโยคหรือตัวแปรที่ตามหลงั ตวั มนั เอง ถ้าประโยคหรือตัวแปรท่อี ยู่ก่อนหน้ามีคา่ ทางตรรกศาสตร์เปน็ false เพราะวา่ คา่ ที่เปน็ false เม่อื นำมาประมวลผลกับ คา่ อืน่ ๆ แล้วจะได้ false เสมอexpression ผลtrue and true Truetrue and false Falsefalse and true Falsefalse and false False7.2 OR (หรือ) มีคีย์เวิร์ดคือ or จะประมวลผลประโยคหรือตวั แปรที่ตามมาเม่ือประโยคแรก หรอื ตัวแปรตัวแรกมีคา่ เป็นtrue เพราะว่าประโยคหรือตัวแปรทีม่ คี ่าเป็น true เมือ่ นำมาประมวลกับค่าใด ๆ กต็ ามจะได้คา่ true เสมอexpression ผลtrue or true Truetrue or false Truefalse or true Truefalse or false False 47
48 นพิ จนท์ างตรรกะศาสตร์ (Boolean Expressions)7.3 NOT (ไม)่ มคี ีย์เวริ ด์ คือ not โดยเม่ือไปอยหู่ นา้ ตวั แปรหรอื ประโยคท่ีมคี า่ ทางตรรกศาสตรค์ า่ ใดค่าหนง่ึ ก็จะเปลีย่ นคา่นั้นใหเ้ ปน็ ตรงกนั ข้ามทันที expression ผล not true False not false True ตวั อยา่ ง>>> i = 1>>> j = 2>>> k = 3>>> l = 1>>> i == k and j == iFalse>>> i == k or l == iTrue>>> not i == k and l == iTrue
บทที่ 8ช่วงของการทำงาน (Statement block) และ ช่วงชีวิตของตวั แปร (Life time หรือ Variablescope)8.1 ช่วงของการทำงาน (Statement block) กอ่ นอน่ื เราต้องทำความเข้าในเกยี่ วกบั ชว่ งของการทำงานของไพธอนเสยี ก่อน ยกตวั อยา่ ง ในภาษา Cนั้นช่วงของการทำงานจะครอบดว้ ย เครอ่ื งหมายปีกกาเปดิ และปดิ ..... แต่ใน Python ใช้ยอ่ หน้าแทน(indentation) เช่น>>> x = 1>>> if x == 1:>>> print \"True\">>> else:>>> print \"False\">>> print \"xxx\"การจบ block ก็ดูได้จากย่อหนา้ คำสัง่ if ก็อยา่ งท่ีเห็น if ตามดว้ ย เงื่อนไข จบด้วย : (colon) หลัง จากนน้ัส่ิงท่จี ะถูกทำเมอ่ื เงอื่ นไขเป็นจริงกจ็ ะอยูใ่ นย่อหนา้ เย้อื งถัดมา ซงึ่ โปรแกรมข้างบนก็ได้ผลออกมาเป็นTruexxx8.2 ชว่ งชีวติ ของตัวแปร (Life time หรอื Variable scope) ในการกำหนดช่วงชวี ติ ของตัวแปรวา่ ตวั แปรตวั ไหนจะมีช่วงการทำงานในสว่ นใดได้บ้างนัน้ สามารถทำได้โดยจากตวั อยา่ งดา้ นลา่ งนั้น เราได้สร้างตัวแปรชนดิ จำนวนเต็มช่ือวา่ x ให้คา่ คอื 5 และสร้างฟังก์ชน่ั ช่อื ว่าhello โดยในตวั อย่างที่ 1 น้ันเรากำหนดตวั แปรภายในฟงั ก์ชน่ั ให้มีชื่อเป็น x เหมอื นกนั แลว้ ใส่ค่าให้เป็น 6แล้วตอ่ มาให้ฟังก์ชนั่ hello ทำงาน และ print คา่ x ออกมา ผลคือได้ 6 และ 5 ตามลำดบั ในตวั อยา่ งท่ี 2น้นั เราได้กำหนดตวั แปร และฟงั กช์ ั่นตา่ ง ๆ เหมือนกับตัวอย่างที่ 1 เพยี งแต่เราใช้ global มากำหนดให้กบั xวา่ เราจะใช้ x จาก global scope แทน แลว้ ทำการใส่ค่าใหก้ ับ x เป็น 6 ผลทไี่ ดค้ ือ 6 และ 6 ตามลำดับ 49
50 ชว่ งของการทำงาน (Statement block) และ ช่วงชวี ติ ของตวั แปร (Life time หรอื Variable scope)ตัวอย่างที่ 1 ตวั อยา่ งท่ี 2>>> x = 5 >>> x = 5>>> def hello(): >>> def hello():>>> x = 6 >>> global x>>> print x >>> x = 6>>> hello() >>> print x>>> print x >>> hello() >>> print xคำตอบคอื คำตอบคอื6656 จากตวั อยา่ งทงั้ สองจะเหน็ วา่ เราสามารถใช้ตวั แปรแบบภายในฟังก์ชน่ั และจากภายนอกฟังก์ช่นั ได้ดว้ ยวิธีดังต่อไปนี้1. ถา้ ตอ้ งการใช้ตัวแปรภายนอกฟังกช์ ่นั ที่มีอยู่แล้วให้ในคีย์เวิร์ด global แลว้ ตามดว้ ยช่อื ตวั แปรท่ีมีอยู่ แลว้ จากภายนอกฟังกช์ นั่ น้ัน แล้วจึงนำมาใช้งาน2. ถ้าต้องการประกาศตวั แปรใหม่ภายในฟงั ก์ชนั่ สามารถประกาศตัวแปรไดโ้ ดยทั่วไปไดท้ ันที3. ถ้าตอ้ งการใช้ทัง้ ตวั แปรภายนอกและภายในพรอ้ ม ๆ กนั ใหต้ ั้งชอื่ ตัวแปรท่ีต้งั ใหม่ ซึ่งใช้ภายในฟังก์ช่ัน น้นั ใหช้ ่อื แตกต่างกันเพ่อื ป้องกันการสับสน
Search