Your SlideShare is downloading. ×
  • Like
Python Course #1
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Python Course #1

  • 2,814 views
Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
2,814
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
55
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Python #1Chaiwat Suttipongsakul cwt@bashell.com
  • 2. ลักษณะ และโครงสร้างโดยรวม● Multi-Paradigm● ใช้การเยื้อง (indentation) บ่งบอกจุดเริ่มต้นและสิ้น สุดของแต่ละ block● ตัวแปรเป็น dynamic type● Code อ่านง่าย ละเรียนรู้ได้เร็ว● เขียนแล้วทำางานได้ทันที ไม่ต้อง compile
  • 3. PEP-8 Coding Style Guide● Guido บอกว่าส่วนใหญ่เรามักจะอ่าน (source) code มากกว่าเขียน ดังนั้น เมื่อจะเขียนจึงควรเขียนให้อ่าน ง่าย● PEP-8 มีจุดประสงค์เพื่อทำาให้ Python code ● อ่านง่าย (readability) ● กลมกลืน (consistency)
  • 4. PEP-8 Coding Style Guide (cont.)● เมื่อมีความจำาเป็นที่จะไม่เขียนตาม PEP-8 นั่นเป็น เพราะ ● เขียนตาม PEP-8 แล้วอ่านยาก ● คนอื่นๆ ในทีมไม่ได้เขียนตาม PEP-8 อยูแล้ว ่ – แต่อย่างน้อยน่าจะมีความกลมกลืนกันอยู่ (consistent?) – หรือมองว่าเป็นโอกาสที่ดีที่จะโน้มน้าวคนในทีมให้ refactor code ให้เป็นไปตาม PEP-8
  • 5. PEP-8 Code Lay-out● ใช้ชองว่าง (whitespace) 4 ช่อง หรือ tab 1 tab ่ สำาหรับการเยื้อง 1 ครั้ง● ถ้าเป็นไปได้ ไม่ควรใช้ tab เลย● ถ้าต้องใช้ tab อย่าให้มีทั้ง tab และ space ปนกัน● แต่ละบรรทัดไม่ควรเกิน 79 ตัวอักษร (seriously)● ใช้บรรทัดว่าง 1 บรรทัดคั่นส่วนต่างๆ ของโปรแกรม
  • 6. PEP-8 Code Lay-out (cont.)● ตัวอย่าง
  • 7. PEP-8 Code Lay-out (cont.)● Import library 1 ตัวต่อ 1 บรรทัด (มันง่ายตอนลบ)● Import เกิดขึ้นที่ส่วนบนสุดของไฟล์เสมอ● ตัวอย่าง
  • 8. PEP-8 การใช้ Whitespace● อย่าใช้ whitespace พรำ่าเพรื่อ (อย่าลืมว่าแต่ละ บรรทัดควรจะยาวแค่ 79 ตัวอักษร)
  • 9. PEP-8 Read More● http://www.python.org/dev/peps/pep-0008/● และโปรดจำาไว้เสมอว่าการเขียน Python โดยไม่อ่าน และทำาความเข้าใจ PEP-8 ก่อนนั้นเป็นบาป
  • 10. PEP-20 The Zen of Python● ท่านผู้อาวุโสไพธอน Tim Peters ได้ร้อยเรียง แนวทางของท่านเผด็จการใจดีเพื่อชีวิต (BDFL – Guido van Rossum) ออกมาเป็นลำานำา 20 บาท แต่มี เพียง 19 บาทที่ได้รจนา 1.สวยงามย่อมดีกว่าน่าเกลียด 2.ชัดแจ้งย่อมดีกว่าโดยนัย 3.เรียบง่ายย่อมดีกว่าซับซ้อน
  • 11. PEP-20 The Zen of Python (cont.)4.ซับซ้อนย่อมดีกว่ายุงเหยิง ่5.โปร่งใสย่อมดีกว่าทับซ้อน6.โล่งย่อมดีกว่าแออัด7.การอ่านแล้วเข้าใจง่ายจำาเป็นเสมอ8.กรณีพเศษ ไม่ได้พิเศษจนต้องแหกกฏ ิ9.แต่กระนั้นสิ่งทีใช้งานได้ย่อมชนะสิ่งที่บริสุทธิ์ ่ (เขียนตามกฏแต่ใช้งานไม่ได้)
  • 12. PEP-20 The Zen of Python (cont.)10.ข้อผิดพลาดไม่ควรถูกปล่อยผ่านอย่างเงียบเชียบ11.ยกเว้นว่าต้องการปล่อยผ่านแบบตั้งใจ12.เมือเจอความกำากวมจงอย่าคาดเดา ่13.มันควรจะมีเพียงหนึ่งวิธี และเป็นหนึงวิธีที่ชัดแจ้งในการ ่ ทำาสิ่งใดๆ14.แต่กระนันวิธีนนอาจจะไม่ชัดแจ้งแต่แรกยกเว้นเจ้าจะเป็น ้ ั้ ชาวดัทช์
  • 13. PEP-20 The Zen of Python (cont.)15.ทำาตอนนี้ย่อมดีกว่าไม่ทำาเลย16.แต่กระนั้นไม่ทำาเลยมักจะดีกว่าต้องทำาเดี๋ยวนี้17.ถ้าการอิมพลิเมนต์มันอธิบายยาก มัน เป็นความคิดที่ไม่ดี18.ถ้าการอิมพลิเมนต์มันอธิบายง่าย มัน อาจจะเป็นความคิดที่ดี19.เนมสเปซเป็นความคิดทีบรรเจิด เรามาทำากันอีกเยอะๆเถอะ! ่20. แปลจาก http://www.python.org/dev/peps/pep-0020/
  • 14. ชนิดของตัวแปร● String/Unicode a = hello there● Integer b=7● Floating point c = 3.2● Boolean (True/False) d = True● None e = None● Tuple f = (1,2,3,a,b,c,0.4)● List g = [1,2,3,a,b,c,0.4]● Dictionary h = {id: cwt, age: 33}● Class instance g = MyClass()
  • 15. เล่นกับ Tuple List and Dictionary● Tuple สร้างแล้วแก้ไขสิงที่อยู่ภายในไม่ได้ ่ ● การแก้ tuple คือ ทำาลายตัวเก่าแล้วสร้างตัวใหม่● List สร้างแล้วแก้ไขสิงที่อยู่ภายในได้ ่ ● นอกจากแก้แลัวยัง ทำาได้อีกหลายอย่าง --> (demo)● Dictionary คือตัวแปรประเภท key, value● สมาชิกของ tutple list และ Value ของ dictionary นั้นจะเป็นอะไรก็ได้ --> (demo)
  • 16. การกระทำา (operation)● การกระทำาได้แก่ + - * / % ** &● Integer กระทำากับ integer จะได้ผลเป็น integer ● 3/2 == 1● ยกเว้น interger ยกกำาลัง (**) กับ integer ที่ติดลบ ● 2**-2 == 0.25● Integer กระทำากับ float จะได้ผลเป็น float ● 3/2.0 == 1.5● + จะกลายเป็น string concat เมื่อใช้กับ string ด้วยกัน ● asdf + qwerty == asdfqwerty
  • 17. การกระทำา (cont.)● Tuple + tuple หรือ list + list ได้ ● (1,2) + (3,4) == (1,2,3,4) ● [1,2] + [3,4] == [1,2,3,4]● แต่ tuple + list ไม่ได้● เขียนย่อการกระทำาบางอย่างได้ เช่น ● x = x+1 เขียนได้เป็น x += 1
  • 18. การกระทำาทาง Logic● การกระทำางาน Logic เขียนเป็นสัญลักษณ์ก็ได้ เช่น & | แต่ นิยมเขียนเป็นข้อความ and or not มากกว่า ● X & Y นิยมเขียนเป็น X and Y● การเปรียบเทียบตัวแปร กับค่า True False None จะใช้ is ● if x is True: <do something> ● if y is not None: <do something>● การเปรียบเทียบตัวแปรกับตัวแปร ใช้ == เช่น --> (demo)● การกระทำางาน Logic จะเขียนแบบย่อ ก็ได้ เช่น ● X &= (a == b)
  • 19. Function และการใช้แบบ shell script● Python จะอ่านไฟล์ตั้งแต่บนลงล่างอยู่แล้ว● ดังนันถ้าสั่งให้ทำาอะไรในไฟล์ ก็จะทำาลงมาเป็นลำาดับ ้ เช่นเดียวกับ shell script ของ Unix หรือ batch file ของ Windows● การกำาหนดกลุ่มของ statement ให้เป็น function จะ ใช้ ● def <function name>(var1, var2, ...): <statement1> <statement2>
  • 20. Function (cont.)● การกำาหนด function ไม่จำาเป็นต้องรับตัวแปรก็ได้● Function ไม่จำาเป็นต้อง return ค่าใดๆ โดยการไม่สั่ง return เมื่อจบ function จะถือว่า return None● ตัวแปรภายใน function ชื่อซำ้ากับข้างนอกได้ เพราะ ถือว่าเป็น local● แต่ถ้ากำาหนดชือตัวแปรภายในซำ้ากับตัวแปรข้างนอก ่ แล้ว จะไม่สามารถใช้งานตัวแปรข้างนอกใน function นั้นได้อีก
  • 21. Python as a script● ถ้ามี function หลายๆ ตัว ควรจะมี main function เพื่อเรียกใช้ function แต่ละตัวตามลำาดับ def a(x,y): return x+y def b(x,y): return x-y if __name__ == __main__: a(1,2) b(3,4)
  • 22. Python as a script (cont.)● เหตุที่ต้องมีการกำาหนด ● if __name__ == __main__:● เพราะต้องการให้ อะไรก็ตามภายใต้ if นี้ ทำาการก็ต่อ เมื่อถูกเรียกใช้ตรงๆ จากภายนอก เช่น ถูกสังว่า ่ ● $ python example.py● แต่จะไม่ทำางานเมื่อโดน import ด้วย python file อื่น เช่น from example import * ● --> (demo)
  • 23. Python แบบ OOP● ต้องมีการกำาหนด class ● Class เสมือนแม่พิมพ์ขนม เมือแคะขนมออกมา ตัวขนมจะ ่ มีรูปร่างเหมือนแม่พิมพ์ แต่กินได้ (คงไม่มใครแทะแม่พมพ์ ี ิ เล่น) ● Python class ก็เป็นเช่นเดียวกัน ● Class instance กำาเนิดจาก class และมี life cycle เกิด ขึ้น ตั้งอยู่ และดับไป สุดท้ายโดน garbage collector เก็บ กวาด
  • 24. Python แบบ OOP (cont.)● การกำาหนด class class MyClass(object): def __init__(self, a): self.a = a self.x_file = open(x.txt,r) def __del__(self): self.x_file.close() def read_x(self): return self.x_file.reads()● การสร้าง class instance my_class = MyClass(1)
  • 25. Python แบบ OOP (cont.)● การเรียกใช้ class method ● my_class.read_x()● การ access class property ● my_class.a● เมื่อเลิกใช้ my_class แล้ว สามารถสั่ง ● del(my_class)● คำาสั่งภายใน __del__ ของ class จะทำางานก่อนที่จะปล่อย ให้ garbage collector มากำาจัด my_class ทิ้งไป
  • 26. ทำาไมต้องเขียนแบบ OOP● Code สะอาดกว่า● Garbage collector ทำางานได้ดีกว่า ทำาให้ใช้ ทรัพยากรของระบบน้อยกว่า● Class จะโดน Python compile ไว้ก่อนให้เป็น python bytebode อยู่แล้ว ดังนั้นเมื่อมีการสร้าง class instance จะเสีย overhead น้อยกว่า นั่นคือ โดยรวม code ก็จะทำางานได้เร็วกว่า
  • 27. ทำาไมต้องเขียนแบบ OOP (cont.)● เนื่องจาก class มี method พิเศษเพื่อควบคุมการเกิด (__init__) และตาย (__del__) ดังนั้น เราสามารถ ออกแบบให้ class เตรียมสิงที่เราต้องการก่อนใน ่ __ini__ เช่น เปิด connection ไปยัง database และ เมื่อเราจะเลิกใช้ ก็สงให้ close connection ใน ั่ __del__
  • 28. ทำาไมต้องเขียนแบบ OOP (cont.)● Class สามารถ สืบทอดได้ ดังนั้นเมื่อทำางานร่วมกับ คนอื่น อาจจะมีคนที่เขียน class ดีๆ เอาไว้ก่อน แต่ยัง ขาดคุณสมบัติที่เราต้องการ เราก็แค่ subclass (inherit) class นั้นมาเพิ่มเติ่มส่วนที่เราต้องการ
  • 29. การอ่าน/เขียนไฟล์● Python จะสร้างตัวแปรที่ชี้ไปยังไฟล์บน disk ด้วยคำา สั่ง open เช่น ● a = open(a.txt,r) # เปิดไฟล์ a.txt สำาหรับอ่าน ● b = open(b.txt,w) # เปิดไฟล์ b.txt สำาหรับเขียน ● c = open(c.txt,a) # เปิดไฟล์ c.txt สำาหรับเขียนเพิม ่
  • 30. การอ่าน/เขียนไฟล์ (cont.)● การอ่านจะใช้ read, readline, readlines ● a.read() จะอ่านตั้งแต่ต้นจนจบไฟล์ออกมาเป็น string ● a.readline() จะอ่านทีละบรรทัด ● a.readlines() จะเหมือน readline() แต่อ่านไปจนจบไฟล์ ออกมาเป็น list of string
  • 31. การอ่าน/เขียนไฟล์ (cont.)● การเขียนจะใช้ write หรือ writelines ● b.write(something) ● b.writelines([something1, something2])● Writelines ใช้เขียน sequence of string เช่น ตัวอย่างข้างบน คือ list of string
  • 32. Calculation● สามารถใช้ python shell เป็นเครื่องคิดเลขได้● --> (demo)
  • 33. Tristate Conditions● ใน Python จะมีคาพิเศษ 3 ค่า คือ True, False, และ ่ None● Logic operation ระหว่าง True กับ False จะเหมือน กับโปรแกรมอื่นๆ หรือหลักการทางตรรกศาสตร์ทั่วๆ ไป● None เป็นค่าพิเศษ แปลว่า ไม่มีอะไร ไม่ใช่ True ไม่ใช่ False
  • 34. Tristate Conditions (cont.)● ระวังเวลาเขียนเงื่อนไขเปรียบเทียบ● จาก The Zen of Python, ชัดแจ้งย่อมดีกว่าโดยนัย ● if x: # ถ้า x มีค่าอะไรก็ตามทีไม่ใช่ 0, False, None ่ <do something> ● แต่ถ้าต้องการทำาเมือ x เป็น None เท่านัน ่ ้ ● If x is None: <do otherthing> ● ในกรณีแรก ถ้าจะเขียนให้ชดแจ้ง เขียนแบบนีก็ได้ ั ้ ● If x is not None:
  • 35. Loop● For for x in [1,2,3,4]: print(x)● While x=0 while x < 10: print(x) x += 1● Endless loop while True:
  • 36. ข้อจำากัด● GIL – Global Interpreter Lock ● ณ เวลาหนึงๆ Python จะทำางานเพียง thread เดียวเท่านั้น ่ (แม้โปรแกรมจะเขียน แบบ multi-thread) ● ดังนัน จึงใช้ CPU ได้แค่ 1 core ้ ● แก้ปัญหาด้วยการเปลี่ยนจาก threading เป็น multiprocessing (แต่มนยาก) ั● ไม่มีข้อจำากัดนี้บน IronPython หรือ Jython
  • 37. Optimization / JIT / PyPy● Optimization ทำาได้ด้วยการเขียน algorithm ที่ดี● ตัว Python เองสามารถใส่ -O ได้เวลา run โปรแกรม เช่น $ python -O example1.py● ถ้าใช้ python 32 bit สามารถใช้ psyco ได้● หรือใช้ PyPy (กำาลังพัฒนาอยู่)
  • 38. เครื่องมือที่ใช้ในการเขียน● Editor ● Vim (windows, linux, mac) ● Pyscripter - http://code.google.com/p/pyscripter/ (windows) ● Stanis Python Editor (SPE) - http://sourceforge.net/projects/spe/● IDE ● Eclipse + pydev (free – open source) ● WingIDE (commercial) ● Komodo (มีทั้ง free และ commercial)
  • 39. Interactive shell● python● ipython● bpython● IDLE (GUI)
  • 40. Libraries● Library ของ python มีเยอะมาก● หาได้จาก PyPI - http://pypi.python.org/pypi● Library บางตัวดีกว่าตัวที่มาพร้อมกับ python เอง ● เช่น urllib3 ดีกว่า urllib2 ที่ built-in มากับ python
  • 41. Q&A