Python Course #1

41
Python #1 Chaiwat Suttipongsakul [email protected]

Transcript of Python Course #1

Page 1: Python Course #1

Python #1

Chaiwat [email protected]

Page 2: Python Course #1

ลักษณะ และโครงสร้างโดยรวม● Multi-Paradigm

● ใชก้ารเยื้อง (indentation) บง่บอกจุดเริ่มต้นและสิ้นสุดของแต่ละ block

● ตัวแปรเปน็ dynamic type

● Code อ่านง่าย ละเรียนรู้ได้เร็ว● เขียนแล้วทำางานได้ทันที ไม่ต้อง compile

Page 3: Python Course #1

PEP-8 Coding Style Guide

● Guido บอกว่าส่วนใหญ่เรามักจะอ่าน (source) code มากกว่าเขียน ดังนั้น เมื่อจะเขียนจึงควรเขียนให้อ่านง่าย

● PEP-8 มีจุดประสงคเ์พื่อทำาให้ Python code

● อ่านง่าย (readability)

● กลมกลืน (consistency)

Page 4: Python Course #1

PEP-8 Coding Style Guide (cont.)

● เมื่อมีความจำาเป็นที่จะไม่เขียนตาม PEP-8 นั่นเป็นเพราะ● เขียนตาม PEP-8 แล้วอ่านยาก● คนอ่ืนๆ ในทมีไมไ่ด้เขียนตาม PEP-8 อยูแ่ล้ว

– แต่อย่างน้อยน่าจะมีความกลมกลืนกันอยู่ (consistent?)

– หรือมองว่าเป็นโอกาสที่ดีที่จะโน้มน้าวคนในทีมให้ refactor code ให้เป็นไปตาม PEP-8

Page 5: Python Course #1

PEP-8 Code Lay-out

● ใชช้อ่งว่าง (whitespace) 4 ชอ่ง หรือ tab 1 tab สำาหรับการเยื้อง 1 ครั้ง

● ถ้าเป็นไปได้ ไม่ควรใช้ tab เลย● ถ้าต้องใช ้tab อย่าให้มีทั้ง tab และ space ปนกัน● แต่ละบรรทัดไม่ควรเกิน 79 ตัวอักษร (seriously)

● ใชบ้รรทัดว่าง 1 บรรทัดคั่นสว่นต่างๆ ของโปรแกรม

Page 6: Python Course #1

PEP-8 Code Lay-out (cont.)

● ตัวอย่าง

Page 7: Python Course #1

PEP-8 Code Lay-out (cont.)

● Import library 1 ตัวต่อ 1 บรรทัด (มันง่ายตอนลบ)

● Import เกิดขึ้นที่ส่วนบนสุดของไฟล์เสมอ● ตัวอย่าง

Page 8: Python Course #1

PEP-8 การใช้ Whitespace

● อย่าใช ้whitespace พรำ่าเพรื่อ (อย่าลืมว่าแต่ละบรรทัดควรจะยาวแค ่79 ตัวอักษร)

Page 9: Python Course #1

PEP-8 Read More

● http://www.python.org/dev/peps/pep-0008/

● และโปรดจำาไว้เสมอว่าการเขียน Python โดยไม่อ่าน และทำาความเข้าใจ PEP-8 ก่อนนั้นเปน็บาป

Page 10: Python Course #1

PEP-20 The Zen of Python

● ท่านผู้อาวุโสไพธอน Tim Peters ได้ร้อยเรียงแนวทางของท่านเผด็จการใจดีเพื่อชวีิต (BDFL – Guido van Rossum) ออกมาเป็นลำานำา 20 บาท แต่มีเพียง 19 บาทที่ได้รจนา1.สวยงามยอ่มดีกว่านา่เกลียด

2.ชัดแจ้งยอ่มดีกว่าโดยนยั

3.เรียบง่ายยอ่มดีกว่าซับซ้อน

Page 11: Python Course #1

PEP-20 The Zen of Python (cont.)

4.ซับซ้อนยอ่มดีกว่ายุง่เหยิง

5.โปร่งใสยอ่มดีกว่าทบัซ้อน

6.โล่งยอ่มดีกว่าแออัด

7.การอ่านแล้วเข้าใจง่ายจำาเป็นเสมอ

8.กรณีพเิศษ ไม่ได้พิเศษจนต้องแหกกฏ

9.แต่กระนั้นสิ่งทีใ่ช้งานได้ย่อมชนะสิ่งที่บริสุทธ์ิ(เขียนตามกฏแต่ใช้งานไมไ่ด้)

Page 12: Python Course #1

PEP-20 The Zen of Python (cont.)

10.ข้อผิดพลาดไมค่วรถกูปล่อยผ่านอย่างเงียบเชียบ

11.ยกเว้นว่าต้องการปล่อยผ่านแบบตั้งใจ

12.เมือ่เจอความกำากวมจงอยา่คาดเดา

13.มนัควรจะมเีพียงหนึ่งวิธี และเป็นหนึง่วิธีที่ชัดแจ้งในการทำาสิ่งใดๆ

14.แต่กระนัน้วิธีนัน้อาจจะไมช่ัดแจ้งแต่แรกยกเว้นเจ้าจะเป็นชาวดัทช์

Page 13: Python Course #1

PEP-20 The Zen of Python (cont.)

15.ทำาตอนนี้ย่อมดีกว่าไม่ทำาเลย

16.แต่กระนั้นไม่ทำาเลยมักจะดีกว่าต้องทำาเดี๋ยวนี้

17.ถ้าการอิมพลิเมนต์มันอธิบายยาก มันเป็นความคิดที่ไม่ดี

18.ถ้าการอิมพลิเมนต์มันอธิบายง่าย มันอาจจะเป็นความคิดที่ดี

19.เนมสเปซเป็นความคิดทีบ่รรเจิด เรามาทำากันอีกเยอะๆเถอะ!

20.

แปลจาก http://www.python.org/dev/peps/pep-0020/

Page 14: Python Course #1

ชนิดของตัวแปร● 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()

Page 15: Python Course #1

เล่นกบั Tuple List and Dictionary

● Tuple สร้างแล้วแก้ไขสิง่ที่อยู่ภายในไม่ได้● การแก้ tuple คือ ทำาลายตัวเก่าแล้วสร้างตัวใหม่

● List สร้างแล้วแก้ไขสิง่ที่อยู่ภายในได้● นอกจากแก้แลัวยัง ทำาได้อีกหลายอย่าง --> (demo)

● Dictionary คอืตัวแปรประเภท key, value

● สมาชกิของ tutple list และ Value ของ dictionary นั้นจะเปน็อะไรก็ได้ --> (demo)

Page 16: Python Course #1

การกระทำา (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'

Page 17: Python Course #1

การกระทำา (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

Page 18: Python Course #1

การกระทำาทาง 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)

Page 19: Python Course #1

Function และการใช้แบบ shell script

● Python จะอ่านไฟล์ตั้งแต่บนลงล่างอยู่แล้ว● ดงันัน้ถา้สั่งให้ทำาอะไรในไฟล์ ก็จะทำาลงมาเปน็ลำาดบั

เชน่เดียวกบั shell script ของ Unix หรือ batch file ของ Windows

● การกำาหนดกลุ่มของ statement ให้เปน็ function จะใช้● def <function name>(var1, var2, ...):

<statement1><statement2>

Page 20: Python Course #1

Function (cont.)

● การกำาหนด function ไม่จำาเป็นต้องรับตัวแปรก็ได้● Function ไม่จำาเป็นต้อง return ค่าใดๆ โดยการไม่สั่ง

return เมื่อจบ function จะถือว่า return None

● ตัวแปรภายใน function ชื่อซำ้ากับข้างนอกได้ เพราะถือว่าเป็น local

● แต่ถ้ากำาหนดชือ่ตัวแปรภายในซำ้ากับตัวแปรข้างนอกแล้ว จะไม่สามารถใชง้านตัวแปรข้างนอกใน function นั้นได้อีก

Page 21: Python Course #1

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)

Page 22: Python Course #1

Python as a script (cont.)

● เหตุที่ต้องมีการกำาหนด● if __name__ == '__main__':

● เพราะต้องการให้ อะไรก็ตามภายใต้ if นี้ ทำาการก็ต่อเมื่อถูกเรียกใชต้รงๆ จากภายนอก เช่น ถูกสัง่ว่า● $ python example.py

● แต่จะไม่ทำางานเมื่อโดน import ด้วย python file อื่น เช่น from example import *● --> (demo)

Page 23: Python Course #1

Python แบบ OOP

● ต้องมีการกำาหนด class

● Class เสมอืนแมพ่ิมพ์ขนม เมือ่แคะขนมออกมา ตัวขนมจะมรีูปร่างเหมอืนแมพ่ิมพ ์แต่กินได้ (คงไมม่ใีครแทะแมพ่มิพ์เล่น)

● Python class ก็เป็นเช่นเดียวกัน● Class instance กำาเนิดจาก class และม ีlife cycle เกิด

ข้ึน ตั้งอยู่ และดับไป สดุทา้ยโดน garbage collector เก็บกวาด

Page 24: Python Course #1

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)

Page 25: Python Course #1

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 ทิ้งไป

Page 26: Python Course #1

ทำาไมต้องเขียนแบบ OOP

● Code สะอาดกว่า● Garbage collector ทำางานได้ดีกว่า ทำาให้ใช้

ทรัพยากรของระบบน้อยกว่า● Class จะโดน Python compile ไว้ก่อนให้เปน็

python bytebode อยู่แล้ว ดังนั้นเมื่อมีการสร้าง class instance จะเสีย overhead นอ้ยกว่า นั่นคือโดยรวม code ก็จะทำางานได้เร็วกว่า

Page 27: Python Course #1

ทำาไมต้องเขียนแบบ OOP (cont.)

● เนื่องจาก class มี method พิเศษเพื่อควบคุมการเกิด (__init__) และตาย (__del__) ดังนั้น เราสามารถออกแบบให้ class เตรียมสิง่ที่เราต้องการก่อนใน __ini__ เชน่ เปดิ connection ไปยัง database และเมื่อเราจะเลิกใช ้ก็สัง่ให้ close connection ใน __del__

Page 28: Python Course #1

ทำาไมต้องเขียนแบบ OOP (cont.)

● Class สามารถ สืบทอดได้ ดังนั้นเมื่อทำางานร่วมกับคนอื่น อาจจะมีคนที่เขียน class ดีๆ เอาไว้ก่อน แต่ยังขาดคณุสมบัติที่เราต้องการ เราก็แค ่subclass (inherit) class นั้นมาเพิ่มเติ่มสว่นที่เราต้องการ

Page 29: Python Course #1

การอ่าน/เขียนไฟล์

● Python จะสร้างตัวแปรที่ชี้ไปยังไฟล์บน disk ด้วยคำาสั่ง open เชน่● a = open('a.txt','r') # เปิดไฟล์ a.txt สำาหรับอ่าน● b = open('b.txt','w') # เปิดไฟล์ b.txt สำาหรับเขียน● c = open('c.txt','a') # เปิดไฟล์ c.txt สำาหรับเขียนเพิม่

Page 30: Python Course #1

การอ่าน/เขียนไฟล์ (cont.)

● การอ่านจะใช ้read, readline, readlines

● a.read() จะอ่านตั้งแต่ต้นจนจบไฟล์ออกมาเป็น string

● a.readline() จะอ่านทลีะบรรทดั● a.readlines() จะเหมอืน readline() แต่อ่านไปจนจบไฟล์

ออกมาเป็น list of string

Page 31: Python Course #1

การอ่าน/เขียนไฟล์ (cont.)

● การเขียนจะใช ้write หรือ writelines● b.write('something')● b.writelines(['something1', 'something2'])

● Writelines ใช้เขียน sequence of string เชน่ ตัวอย่างข้างบน คอื list of string

Page 32: Python Course #1

Calculation

● สามารถใช ้python shell เป็นเครื่องคิดเลขได้● --> (demo)

Page 33: Python Course #1

Tristate Conditions

● ใน Python จะมีคา่พิเศษ 3 คา่ คอื True, False, และ None

● Logic operation ระหว่าง True กับ False จะเหมือนกับโปรแกรมอื่นๆ หรือหลักการทางตรรกศาสตร์ทั่วๆ ไป

● None เป็นค่าพิเศษ แปลว่า ไม่มีอะไร ไม่ใช ่True ไม่ใช่ False

Page 34: Python Course #1

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:

Page 35: Python Course #1

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:

Page 36: Python Course #1

ข้อจำากัด● GIL – Global Interpreter Lock

● ณ เวลาหนึง่ๆ Python จะทำางานเพยีง thread เดียวเทา่นั้น (แมโ้ปรแกรมจะเขียน แบบ multi-thread)

● ดังนัน้ จึงใช้ CPU ได้แค่ 1 core

● แกป้ัญหาด้วยการเปลี่ยนจาก threading เป็น multiprocessing (แต่มนัยาก)

● ไม่มีข้อจำากัดนี้บน IronPython หรือ Jython

Page 37: Python Course #1

Optimization / JIT / PyPy

● Optimization ทำาได้ด้วยการเขียน algorithm ที่ดี● ตัว Python เองสามารถใส ่-O ได้เวลา run โปรแกรม

เช่น$ python -O example1.py

● ถ้าใช ้python 32 bit สามารถใช ้psyco ได้● หรือใช ้PyPy (กำาลังพัฒนาอยู่)

Page 38: Python Course #1

เครื่องมือที่ใช้ในการเขียน● Editor

● Vim (windows, linux, mac)● Pyscripter - http://code.google.com/p/pyscripter/

(windows)● Stani's Python Editor (SPE) -

http://sourceforge.net/projects/spe/

● IDE● Eclipse + pydev (free – open source)● WingIDE (commercial)

● Komodo (มีทั้ง free และ commercial)

Page 39: Python Course #1

Interactive shell

● python● ipython● bpython● IDLE (GUI)

Page 40: Python Course #1

Libraries

● Library ของ python มีเยอะมาก● หาได้จาก PyPI - http://pypi.python.org/pypi

● Library บางตัวดีกว่าตัวที่มาพร้อมกับ python เอง● เช่น urllib3 ดีกว่า urllib2 ที ่built-in มากับ python

Page 41: Python Course #1

Q&A