Python #1Chaiwat Suttipongsakul  cwt@bashell.com
ลักษณะ และโครงสร้างโดยรวม●   Multi-Paradigm●    ใช้การเยื้อง (indentation) บ่งบอกจุดเริ่มต้นและสิ้น    สุดของแต่ละ block● ...
PEP-8 Coding Style Guide●    Guido บอกว่าส่วนใหญ่เรามักจะอ่าน (source) code    มากกว่าเขียน ดังนั้น เมื่อจะเขียนจึงควรเขีย...
PEP-8 Coding Style Guide (cont.)●    เมื่อมีความจำาเป็นที่จะไม่เขียนตาม PEP-8 นั่นเป็น    เพราะ    ●        เขียนตาม PEP-8...
PEP-8 Code Lay-out●    ใช้ชองว่าง (whitespace) 4 ช่อง หรือ tab 1 tab        ่    สำาหรับการเยื้อง 1 ครั้ง●    ถ้าเป็นไปได้...
PEP-8 Code Lay-out (cont.)●    ตัวอย่าง
PEP-8 Code Lay-out (cont.)●    Import library 1 ตัวต่อ 1 บรรทัด (มันง่ายตอนลบ)●    Import เกิดขึ้นที่ส่วนบนสุดของไฟล์เสมอ●...
PEP-8 การใช้ Whitespace●    อย่าใช้ whitespace พรำ่าเพรื่อ (อย่าลืมว่าแต่ละ    บรรทัดควรจะยาวแค่ 79 ตัวอักษร)
PEP-8 Read More●   http://www.python.org/dev/peps/pep-0008/●    และโปรดจำาไว้เสมอว่าการเขียน Python โดยไม่อ่าน    และทำาคว...
PEP-20 The Zen of Python●    ท่านผู้อาวุโสไพธอน Tim Peters ได้ร้อยเรียง    แนวทางของท่านเผด็จการใจดีเพื่อชีวิต (BDFL –    ...
PEP-20 The Zen of Python (cont.)4.ซับซ้อนย่อมดีกว่ายุงเหยิง                     ่5.โปร่งใสย่อมดีกว่าทับซ้อน6.โล่งย่อมดีกว่...
PEP-20 The Zen of Python (cont.)10.ข้อผิดพลาดไม่ควรถูกปล่อยผ่านอย่างเงียบเชียบ11.ยกเว้นว่าต้องการปล่อยผ่านแบบตั้งใจ12.เมือ...
PEP-20 The Zen of Python (cont.)15.ทำาตอนนี้ย่อมดีกว่าไม่ทำาเลย16.แต่กระนั้นไม่ทำาเลยมักจะดีกว่าต้องทำาเดี๋ยวนี้17.ถ้าการอ...
ชนิดของตัวแปร●   String/Unicode          a = hello there●   Integer                 b=7●   Floating point          c = 3.2...
เล่นกับ Tuple List and Dictionary●    Tuple สร้างแล้วแก้ไขสิงที่อยู่ภายในไม่ได้                          ่    ●        การ...
การกระทำา (operation)●    การกระทำาได้แก่ + - * / % ** &●    Integer กระทำากับ integer จะได้ผลเป็น integer    ●   3/2 == 1...
การกระทำา (cont.)●    Tuple + tuple หรือ list + list ได้    ●   (1,2) + (3,4) == (1,2,3,4)    ●   [1,2] + [3,4] == [1,2,3,...
การกระทำาทาง Logic●    การกระทำางาน Logic เขียนเป็นสัญลักษณ์ก็ได้ เช่น & | แต่    นิยมเขียนเป็นข้อความ and or not มากกว่า ...
Function และการใช้แบบ shell script●    Python จะอ่านไฟล์ตั้งแต่บนลงล่างอยู่แล้ว●    ดังนันถ้าสั่งให้ทำาอะไรในไฟล์ ก็จะทำาล...
Function (cont.)●    การกำาหนด function ไม่จำาเป็นต้องรับตัวแปรก็ได้●    Function ไม่จำาเป็นต้อง return ค่าใดๆ โดยการไม่สั...
Python as a script●    ถ้ามี function หลายๆ ตัว ควรจะมี main function    เพื่อเรียกใช้ function แต่ละตัวตามลำาดับ      def...
Python as a script (cont.)●    เหตุที่ต้องมีการกำาหนด    ●   if __name__ == __main__:●    เพราะต้องการให้ อะไรก็ตามภายใต้ ...
Python แบบ OOP●    ต้องมีการกำาหนด class    ●        Class เสมือนแม่พิมพ์ขนม เมือแคะขนมออกมา ตัวขนมจะ                     ...
Python แบบ OOP (cont.)●    การกำาหนด class      class MyClass(object):        def __init__(self, a):           self.a = a ...
Python แบบ OOP (cont.)●    การเรียกใช้ class method    ●   my_class.read_x()●    การ access class property    ●   my_class...
ทำาไมต้องเขียนแบบ OOP●    Code สะอาดกว่า●    Garbage collector ทำางานได้ดีกว่า ทำาให้ใช้    ทรัพยากรของระบบน้อยกว่า●    Cl...
ทำาไมต้องเขียนแบบ OOP (cont.)●    เนื่องจาก class มี method พิเศษเพื่อควบคุมการเกิด    (__init__) และตาย (__del__) ดังนั้น...
ทำาไมต้องเขียนแบบ OOP (cont.)●    Class สามารถ สืบทอดได้ ดังนั้นเมื่อทำางานร่วมกับ    คนอื่น อาจจะมีคนที่เขียน class ดีๆ เ...
การอ่าน/เขียนไฟล์●    Python จะสร้างตัวแปรที่ชี้ไปยังไฟล์บน disk ด้วยคำา    สั่ง open เช่น    ●        a = open(a.txt,r) #...
การอ่าน/เขียนไฟล์ (cont.)●    การอ่านจะใช้ read, readline, readlines    ●        a.read() จะอ่านตั้งแต่ต้นจนจบไฟล์ออกมาเป็...
การอ่าน/เขียนไฟล์ (cont.)●    การเขียนจะใช้ write หรือ writelines    ●   b.write(something)    ●   b.writelines([something...
Calculation●    สามารถใช้ python shell เป็นเครื่องคิดเลขได้●   --> (demo)
Tristate Conditions●    ใน Python จะมีคาพิเศษ 3 ค่า คือ True, False, และ                   ่    None●    Logic operation ร...
Tristate Conditions (cont.)●    ระวังเวลาเขียนเงื่อนไขเปรียบเทียบ●    จาก The Zen of Python, ชัดแจ้งย่อมดีกว่าโดยนัย    ● ...
Loop●   For      for x in [1,2,3,4]:          print(x)●   While      x=0      while x < 10:          print(x)          x +...
ข้อจำากัด●   GIL – Global Interpreter Lock    ●        ณ เวลาหนึงๆ Python จะทำางานเพียง thread เดียวเท่านั้น              ...
Optimization / JIT / PyPy●    Optimization ทำาได้ด้วยการเขียน algorithm ที่ดี●    ตัว Python เองสามารถใส่ -O ได้เวลา run โ...
เครื่องมือที่ใช้ในการเขียน●   Editor    ●   Vim (windows, linux, mac)    ●   Pyscripter - http://code.google.com/p/pyscrip...
Interactive shell●   python●   ipython●   bpython●   IDLE (GUI)
Libraries●    Library ของ python มีเยอะมาก●    หาได้จาก PyPI - http://pypi.python.org/pypi●    Library บางตัวดีกว่าตัวที่ม...
Q&A
Upcoming SlideShare
Loading in...5
×

Python Course #1

3,225

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,225
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
71
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Python Course #1

  1. 1. Python #1Chaiwat Suttipongsakul cwt@bashell.com
  2. 2. ลักษณะ และโครงสร้างโดยรวม● Multi-Paradigm● ใช้การเยื้อง (indentation) บ่งบอกจุดเริ่มต้นและสิ้น สุดของแต่ละ block● ตัวแปรเป็น dynamic type● Code อ่านง่าย ละเรียนรู้ได้เร็ว● เขียนแล้วทำางานได้ทันที ไม่ต้อง compile
  3. 3. PEP-8 Coding Style Guide● Guido บอกว่าส่วนใหญ่เรามักจะอ่าน (source) code มากกว่าเขียน ดังนั้น เมื่อจะเขียนจึงควรเขียนให้อ่าน ง่าย● PEP-8 มีจุดประสงค์เพื่อทำาให้ Python code ● อ่านง่าย (readability) ● กลมกลืน (consistency)
  4. 4. PEP-8 Coding Style Guide (cont.)● เมื่อมีความจำาเป็นที่จะไม่เขียนตาม PEP-8 นั่นเป็น เพราะ ● เขียนตาม PEP-8 แล้วอ่านยาก ● คนอื่นๆ ในทีมไม่ได้เขียนตาม PEP-8 อยูแล้ว ่ – แต่อย่างน้อยน่าจะมีความกลมกลืนกันอยู่ (consistent?) – หรือมองว่าเป็นโอกาสที่ดีที่จะโน้มน้าวคนในทีมให้ refactor code ให้เป็นไปตาม PEP-8
  5. 5. PEP-8 Code Lay-out● ใช้ชองว่าง (whitespace) 4 ช่อง หรือ tab 1 tab ่ สำาหรับการเยื้อง 1 ครั้ง● ถ้าเป็นไปได้ ไม่ควรใช้ tab เลย● ถ้าต้องใช้ tab อย่าให้มีทั้ง tab และ space ปนกัน● แต่ละบรรทัดไม่ควรเกิน 79 ตัวอักษร (seriously)● ใช้บรรทัดว่าง 1 บรรทัดคั่นส่วนต่างๆ ของโปรแกรม
  6. 6. PEP-8 Code Lay-out (cont.)● ตัวอย่าง
  7. 7. PEP-8 Code Lay-out (cont.)● Import library 1 ตัวต่อ 1 บรรทัด (มันง่ายตอนลบ)● Import เกิดขึ้นที่ส่วนบนสุดของไฟล์เสมอ● ตัวอย่าง
  8. 8. PEP-8 การใช้ Whitespace● อย่าใช้ whitespace พรำ่าเพรื่อ (อย่าลืมว่าแต่ละ บรรทัดควรจะยาวแค่ 79 ตัวอักษร)
  9. 9. PEP-8 Read More● http://www.python.org/dev/peps/pep-0008/● และโปรดจำาไว้เสมอว่าการเขียน Python โดยไม่อ่าน และทำาความเข้าใจ PEP-8 ก่อนนั้นเป็นบาป
  10. 10. PEP-20 The Zen of Python● ท่านผู้อาวุโสไพธอน Tim Peters ได้ร้อยเรียง แนวทางของท่านเผด็จการใจดีเพื่อชีวิต (BDFL – Guido van Rossum) ออกมาเป็นลำานำา 20 บาท แต่มี เพียง 19 บาทที่ได้รจนา 1.สวยงามย่อมดีกว่าน่าเกลียด 2.ชัดแจ้งย่อมดีกว่าโดยนัย 3.เรียบง่ายย่อมดีกว่าซับซ้อน
  11. 11. PEP-20 The Zen of Python (cont.)4.ซับซ้อนย่อมดีกว่ายุงเหยิง ่5.โปร่งใสย่อมดีกว่าทับซ้อน6.โล่งย่อมดีกว่าแออัด7.การอ่านแล้วเข้าใจง่ายจำาเป็นเสมอ8.กรณีพเศษ ไม่ได้พิเศษจนต้องแหกกฏ ิ9.แต่กระนั้นสิ่งทีใช้งานได้ย่อมชนะสิ่งที่บริสุทธิ์ ่ (เขียนตามกฏแต่ใช้งานไม่ได้)
  12. 12. PEP-20 The Zen of Python (cont.)10.ข้อผิดพลาดไม่ควรถูกปล่อยผ่านอย่างเงียบเชียบ11.ยกเว้นว่าต้องการปล่อยผ่านแบบตั้งใจ12.เมือเจอความกำากวมจงอย่าคาดเดา ่13.มันควรจะมีเพียงหนึ่งวิธี และเป็นหนึงวิธีที่ชัดแจ้งในการ ่ ทำาสิ่งใดๆ14.แต่กระนันวิธีนนอาจจะไม่ชัดแจ้งแต่แรกยกเว้นเจ้าจะเป็น ้ ั้ ชาวดัทช์
  13. 13. PEP-20 The Zen of Python (cont.)15.ทำาตอนนี้ย่อมดีกว่าไม่ทำาเลย16.แต่กระนั้นไม่ทำาเลยมักจะดีกว่าต้องทำาเดี๋ยวนี้17.ถ้าการอิมพลิเมนต์มันอธิบายยาก มัน เป็นความคิดที่ไม่ดี18.ถ้าการอิมพลิเมนต์มันอธิบายง่าย มัน อาจจะเป็นความคิดที่ดี19.เนมสเปซเป็นความคิดทีบรรเจิด เรามาทำากันอีกเยอะๆเถอะ! ่20. แปลจาก http://www.python.org/dev/peps/pep-0020/
  14. 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. 15. เล่นกับ Tuple List and Dictionary● Tuple สร้างแล้วแก้ไขสิงที่อยู่ภายในไม่ได้ ่ ● การแก้ tuple คือ ทำาลายตัวเก่าแล้วสร้างตัวใหม่● List สร้างแล้วแก้ไขสิงที่อยู่ภายในได้ ่ ● นอกจากแก้แลัวยัง ทำาได้อีกหลายอย่าง --> (demo)● Dictionary คือตัวแปรประเภท key, value● สมาชิกของ tutple list และ Value ของ dictionary นั้นจะเป็นอะไรก็ได้ --> (demo)
  16. 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. 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. 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. 19. Function และการใช้แบบ shell script● Python จะอ่านไฟล์ตั้งแต่บนลงล่างอยู่แล้ว● ดังนันถ้าสั่งให้ทำาอะไรในไฟล์ ก็จะทำาลงมาเป็นลำาดับ ้ เช่นเดียวกับ shell script ของ Unix หรือ batch file ของ Windows● การกำาหนดกลุ่มของ statement ให้เป็น function จะ ใช้ ● def <function name>(var1, var2, ...): <statement1> <statement2>
  20. 20. Function (cont.)● การกำาหนด function ไม่จำาเป็นต้องรับตัวแปรก็ได้● Function ไม่จำาเป็นต้อง return ค่าใดๆ โดยการไม่สั่ง return เมื่อจบ function จะถือว่า return None● ตัวแปรภายใน function ชื่อซำ้ากับข้างนอกได้ เพราะ ถือว่าเป็น local● แต่ถ้ากำาหนดชือตัวแปรภายในซำ้ากับตัวแปรข้างนอก ่ แล้ว จะไม่สามารถใช้งานตัวแปรข้างนอกใน function นั้นได้อีก
  21. 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. 22. Python as a script (cont.)● เหตุที่ต้องมีการกำาหนด ● if __name__ == __main__:● เพราะต้องการให้ อะไรก็ตามภายใต้ if นี้ ทำาการก็ต่อ เมื่อถูกเรียกใช้ตรงๆ จากภายนอก เช่น ถูกสังว่า ่ ● $ python example.py● แต่จะไม่ทำางานเมื่อโดน import ด้วย python file อื่น เช่น from example import * ● --> (demo)
  23. 23. Python แบบ OOP● ต้องมีการกำาหนด class ● Class เสมือนแม่พิมพ์ขนม เมือแคะขนมออกมา ตัวขนมจะ ่ มีรูปร่างเหมือนแม่พิมพ์ แต่กินได้ (คงไม่มใครแทะแม่พมพ์ ี ิ เล่น) ● Python class ก็เป็นเช่นเดียวกัน ● Class instance กำาเนิดจาก class และมี life cycle เกิด ขึ้น ตั้งอยู่ และดับไป สุดท้ายโดน garbage collector เก็บ กวาด
  24. 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. 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. 26. ทำาไมต้องเขียนแบบ OOP● Code สะอาดกว่า● Garbage collector ทำางานได้ดีกว่า ทำาให้ใช้ ทรัพยากรของระบบน้อยกว่า● Class จะโดน Python compile ไว้ก่อนให้เป็น python bytebode อยู่แล้ว ดังนั้นเมื่อมีการสร้าง class instance จะเสีย overhead น้อยกว่า นั่นคือ โดยรวม code ก็จะทำางานได้เร็วกว่า
  27. 27. ทำาไมต้องเขียนแบบ OOP (cont.)● เนื่องจาก class มี method พิเศษเพื่อควบคุมการเกิด (__init__) และตาย (__del__) ดังนั้น เราสามารถ ออกแบบให้ class เตรียมสิงที่เราต้องการก่อนใน ่ __ini__ เช่น เปิด connection ไปยัง database และ เมื่อเราจะเลิกใช้ ก็สงให้ close connection ใน ั่ __del__
  28. 28. ทำาไมต้องเขียนแบบ OOP (cont.)● Class สามารถ สืบทอดได้ ดังนั้นเมื่อทำางานร่วมกับ คนอื่น อาจจะมีคนที่เขียน class ดีๆ เอาไว้ก่อน แต่ยัง ขาดคุณสมบัติที่เราต้องการ เราก็แค่ subclass (inherit) class นั้นมาเพิ่มเติ่มส่วนที่เราต้องการ
  29. 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. 30. การอ่าน/เขียนไฟล์ (cont.)● การอ่านจะใช้ read, readline, readlines ● a.read() จะอ่านตั้งแต่ต้นจนจบไฟล์ออกมาเป็น string ● a.readline() จะอ่านทีละบรรทัด ● a.readlines() จะเหมือน readline() แต่อ่านไปจนจบไฟล์ ออกมาเป็น list of string
  31. 31. การอ่าน/เขียนไฟล์ (cont.)● การเขียนจะใช้ write หรือ writelines ● b.write(something) ● b.writelines([something1, something2])● Writelines ใช้เขียน sequence of string เช่น ตัวอย่างข้างบน คือ list of string
  32. 32. Calculation● สามารถใช้ python shell เป็นเครื่องคิดเลขได้● --> (demo)
  33. 33. Tristate Conditions● ใน Python จะมีคาพิเศษ 3 ค่า คือ True, False, และ ่ None● Logic operation ระหว่าง True กับ False จะเหมือน กับโปรแกรมอื่นๆ หรือหลักการทางตรรกศาสตร์ทั่วๆ ไป● None เป็นค่าพิเศษ แปลว่า ไม่มีอะไร ไม่ใช่ True ไม่ใช่ False
  34. 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. 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. 36. ข้อจำากัด● GIL – Global Interpreter Lock ● ณ เวลาหนึงๆ Python จะทำางานเพียง thread เดียวเท่านั้น ่ (แม้โปรแกรมจะเขียน แบบ multi-thread) ● ดังนัน จึงใช้ CPU ได้แค่ 1 core ้ ● แก้ปัญหาด้วยการเปลี่ยนจาก threading เป็น multiprocessing (แต่มนยาก) ั● ไม่มีข้อจำากัดนี้บน IronPython หรือ Jython
  37. 37. Optimization / JIT / PyPy● Optimization ทำาได้ด้วยการเขียน algorithm ที่ดี● ตัว Python เองสามารถใส่ -O ได้เวลา run โปรแกรม เช่น $ python -O example1.py● ถ้าใช้ python 32 bit สามารถใช้ psyco ได้● หรือใช้ PyPy (กำาลังพัฒนาอยู่)
  38. 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. 39. Interactive shell● python● ipython● bpython● IDLE (GUI)
  40. 40. Libraries● Library ของ python มีเยอะมาก● หาได้จาก PyPI - http://pypi.python.org/pypi● Library บางตัวดีกว่าตัวที่มาพร้อมกับ python เอง ● เช่น urllib3 ดีกว่า urllib2 ที่ built-in มากับ python
  41. 41. Q&A
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×