SlideShare a Scribd company logo
1 of 41
Python #1




Chaiwat Suttipongsakul
  cwt@bashell.com
ลักษณะ และโครงสร้างโดยรวม
●   Multi-Paradigm
●
    ใช้การเยื้อง (indentation) บ่งบอกจุดเริ่มต้นและสิ้น
    สุดของแต่ละ block
●
    ตัวแปรเป็น dynamic type
●
    Code อ่านง่าย ละเรียนรู้ได้เร็ว
●
    เขียนแล้วทำางานได้ทันที ไม่ต้อง compile
PEP-8 Coding Style Guide
●
    Guido บอกว่าส่วนใหญ่เรามักจะอ่าน (source) code
    มากกว่าเขียน ดังนั้น เมื่อจะเขียนจึงควรเขียนให้อ่าน
    ง่าย
●
    PEP-8 มีจุดประสงค์เพื่อทำาให้ Python code
    ●
        อ่านง่าย (readability)
    ●
        กลมกลืน (consistency)
PEP-8 Coding Style Guide (cont.)
●
    เมื่อมีความจำาเป็นที่จะไม่เขียนตาม PEP-8 นั่นเป็น
    เพราะ
    ●
        เขียนตาม PEP-8 แล้วอ่านยาก
    ●
        คนอื่นๆ ในทีมไม่ได้เขียนตาม PEP-8 อยูแล้ว
                                             ่
        –   แต่อย่างน้อยน่าจะมีความกลมกลืนกันอยู่ (consistent?)
        –   หรือมองว่าเป็นโอกาสที่ดีที่จะโน้มน้าวคนในทีมให้ refactor
            code ให้เป็นไปตาม PEP-8
PEP-8 Code Lay-out
●
    ใช้ชองว่าง (whitespace) 4 ช่อง หรือ tab 1 tab
        ่
    สำาหรับการเยื้อง 1 ครั้ง
●
    ถ้าเป็นไปได้ ไม่ควรใช้ tab เลย
●
    ถ้าต้องใช้ tab อย่าให้มีทั้ง tab และ space ปนกัน
●
    แต่ละบรรทัดไม่ควรเกิน 79 ตัวอักษร (seriously)
●
    ใช้บรรทัดว่าง 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-8 ก่อนนั้นเป็นบาป
PEP-20 The Zen of Python
●
    ท่านผู้อาวุโสไพธอน Tim Peters ได้ร้อยเรียง
    แนวทางของท่านเผด็จการใจดีเพื่อชีวิต (BDFL –
    Guido van Rossum) ออกมาเป็นลำานำา 20 บาท แต่มี
    เพียง 19 บาทที่ได้รจนา
    1.สวยงามย่อมดีกว่าน่าเกลียด
    2.ชัดแจ้งย่อมดีกว่าโดยนัย
    3.เรียบง่ายย่อมดีกว่าซับซ้อน
PEP-20 The Zen of Python (cont.)
4.ซับซ้อนย่อมดีกว่ายุงเหยิง
                     ่
5.โปร่งใสย่อมดีกว่าทับซ้อน
6.โล่งย่อมดีกว่าแออัด
7.การอ่านแล้วเข้าใจง่ายจำาเป็นเสมอ
8.กรณีพเศษ ไม่ได้พิเศษจนต้องแหกกฏ
       ิ
9.แต่กระนั้นสิ่งทีใช้งานได้ย่อมชนะสิ่งที่บริสุทธิ์
                  ่
  (เขียนตามกฏแต่ใช้งานไม่ได้)
PEP-20 The Zen of Python (cont.)
10.ข้อผิดพลาดไม่ควรถูกปล่อยผ่านอย่างเงียบเชียบ
11.ยกเว้นว่าต้องการปล่อยผ่านแบบตั้งใจ
12.เมือเจอความกำากวมจงอย่าคาดเดา
      ่
13.มันควรจะมีเพียงหนึ่งวิธี และเป็นหนึงวิธีที่ชัดแจ้งในการ
                                      ่
  ทำาสิ่งใดๆ
14.แต่กระนันวิธีนนอาจจะไม่ชัดแจ้งแต่แรกยกเว้นเจ้าจะเป็น
           ้     ั้
  ชาวดัทช์
PEP-20 The Zen of Python (cont.)
15.ทำาตอนนี้ย่อมดีกว่าไม่ทำาเลย
16.แต่กระนั้นไม่ทำาเลยมักจะดีกว่าต้องทำาเดี๋ยวนี้
17.ถ้าการอิมพลิเมนต์มันอธิบายยาก มัน เป็นความคิดที่ไม่ดี
18.ถ้าการอิมพลิเมนต์มันอธิบายง่าย มัน อาจจะเป็นความคิดที่ดี
19.เนมสเปซเป็นความคิดทีบรรเจิด เรามาทำากันอีกเยอะๆเถอะ!
                       ่
20.


  แปลจาก http://www.python.org/dev/peps/pep-0020/
ชนิดของตัวแปร
●   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()
เล่นกับ Tuple List and Dictionary
●
    Tuple สร้างแล้วแก้ไขสิงที่อยู่ภายในไม่ได้
                          ่
    ●
        การแก้ tuple คือ ทำาลายตัวเก่าแล้วสร้างตัวใหม่
●
    List สร้างแล้วแก้ไขสิงที่อยู่ภายในได้
                         ่
    ●
        นอกจากแก้แลัวยัง ทำาได้อีกหลายอย่าง --> (demo)
●
    Dictionary คือตัวแปรประเภท key, value
●
    สมาชิกของ tutple list และ Value ของ dictionary
    นั้นจะเป็นอะไรก็ได้ --> (demo)
การกระทำา (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'
การกระทำา (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
การกระทำาทาง 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)
Function และการใช้แบบ shell script
●
    Python จะอ่านไฟล์ตั้งแต่บนลงล่างอยู่แล้ว
●
    ดังนันถ้าสั่งให้ทำาอะไรในไฟล์ ก็จะทำาลงมาเป็นลำาดับ
         ้
    เช่นเดียวกับ shell script ของ Unix หรือ batch file
    ของ Windows
●
    การกำาหนดกลุ่มของ statement ให้เป็น function จะ
    ใช้
     ●   def <function name>(var1, var2, ...):
            <statement1>
            <statement2>
Function (cont.)
●
    การกำาหนด function ไม่จำาเป็นต้องรับตัวแปรก็ได้
●
    Function ไม่จำาเป็นต้อง return ค่าใดๆ โดยการไม่สั่ง
    return เมื่อจบ function จะถือว่า return None
●
    ตัวแปรภายใน function ชื่อซำ้ากับข้างนอกได้ เพราะ
    ถือว่าเป็น local
●
    แต่ถ้ากำาหนดชือตัวแปรภายในซำ้ากับตัวแปรข้างนอก
                   ่
    แล้ว จะไม่สามารถใช้งานตัวแปรข้างนอกใน
    function นั้นได้อีก
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)
Python as a script (cont.)
●
    เหตุที่ต้องมีการกำาหนด
    ●   if __name__ == '__main__':
●
    เพราะต้องการให้ อะไรก็ตามภายใต้ if นี้ ทำาการก็ต่อ
    เมื่อถูกเรียกใช้ตรงๆ จากภายนอก เช่น ถูกสังว่า
                                              ่
    ●   $ python example.py
●
    แต่จะไม่ทำางานเมื่อโดน import ด้วย python file อื่น
    เช่น from example import *
    ●   --> (demo)
Python แบบ OOP
●
    ต้องมีการกำาหนด class
    ●
        Class เสมือนแม่พิมพ์ขนม เมือแคะขนมออกมา ตัวขนมจะ
                                      ่
        มีรูปร่างเหมือนแม่พิมพ์ แต่กินได้ (คงไม่มใครแทะแม่พมพ์
                                                 ี         ิ
        เล่น)
    ●
        Python class ก็เป็นเช่นเดียวกัน
    ●
        Class instance กำาเนิดจาก class และมี life cycle เกิด
        ขึ้น ตั้งอยู่ และดับไป สุดท้ายโดน garbage collector เก็บ
        กวาด
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)
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 ทิ้งไป
ทำาไมต้องเขียนแบบ OOP
●
    Code สะอาดกว่า
●
    Garbage collector ทำางานได้ดีกว่า ทำาให้ใช้
    ทรัพยากรของระบบน้อยกว่า
●
    Class จะโดน Python compile ไว้ก่อนให้เป็น
    python bytebode อยู่แล้ว ดังนั้นเมื่อมีการสร้าง
    class instance จะเสีย overhead น้อยกว่า นั่นคือ
    โดยรวม code ก็จะทำางานได้เร็วกว่า
ทำาไมต้องเขียนแบบ OOP (cont.)
●
    เนื่องจาก class มี method พิเศษเพื่อควบคุมการเกิด
    (__init__) และตาย (__del__) ดังนั้น เราสามารถ
    ออกแบบให้ class เตรียมสิงที่เราต้องการก่อนใน
                                ่
    __ini__ เช่น เปิด connection ไปยัง database และ
    เมื่อเราจะเลิกใช้ ก็สงให้ close connection ใน
                         ั่
    __del__
ทำาไมต้องเขียนแบบ OOP (cont.)
●
    Class สามารถ สืบทอดได้ ดังนั้นเมื่อทำางานร่วมกับ
    คนอื่น อาจจะมีคนที่เขียน class ดีๆ เอาไว้ก่อน แต่ยัง
    ขาดคุณสมบัติที่เราต้องการ เราก็แค่ subclass
    (inherit) class นั้นมาเพิ่มเติ่มส่วนที่เราต้องการ
การอ่าน/เขียนไฟล์
●
    Python จะสร้างตัวแปรที่ชี้ไปยังไฟล์บน disk ด้วยคำา
    สั่ง open เช่น
    ●
        a = open('a.txt','r') # เปิดไฟล์ a.txt สำาหรับอ่าน
    ●
        b = open('b.txt','w') # เปิดไฟล์ b.txt สำาหรับเขียน
    ●
        c = open('c.txt','a') # เปิดไฟล์ c.txt สำาหรับเขียนเพิม
                                                              ่
การอ่าน/เขียนไฟล์ (cont.)
●
    การอ่านจะใช้ read, readline, readlines
    ●
        a.read() จะอ่านตั้งแต่ต้นจนจบไฟล์ออกมาเป็น string
    ●
        a.readline() จะอ่านทีละบรรทัด
    ●
        a.readlines() จะเหมือน readline() แต่อ่านไปจนจบไฟล์
        ออกมาเป็น list of string
การอ่าน/เขียนไฟล์ (cont.)
●
    การเขียนจะใช้ write หรือ writelines
    ●   b.write('something')
    ●   b.writelines(['something1', 'something2'])
●
    Writelines ใช้เขียน sequence of string เช่น
    ตัวอย่างข้างบน คือ list of string
Calculation
●
    สามารถใช้ python shell เป็นเครื่องคิดเลขได้
●   --> (demo)
Tristate Conditions
●
    ใน Python จะมีคาพิเศษ 3 ค่า คือ True, False, และ
                   ่
    None
●
    Logic operation ระหว่าง True กับ False จะเหมือน
    กับโปรแกรมอื่นๆ หรือหลักการทางตรรกศาสตร์ทั่วๆ
    ไป
●
    None เป็นค่าพิเศษ แปลว่า ไม่มีอะไร ไม่ใช่ True
    ไม่ใช่ False
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:
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:
ข้อจำากัด
●   GIL – Global Interpreter Lock
    ●
        ณ เวลาหนึงๆ Python จะทำางานเพียง thread เดียวเท่านั้น
                 ่
        (แม้โปรแกรมจะเขียน แบบ multi-thread)
    ●
        ดังนัน จึงใช้ CPU ได้แค่ 1 core
             ้
    ●
        แก้ปัญหาด้วยการเปลี่ยนจาก threading เป็น
        multiprocessing (แต่มนยาก)
                             ั
●
    ไม่มีข้อจำากัดนี้บน IronPython หรือ Jython
Optimization / JIT / PyPy
●
    Optimization ทำาได้ด้วยการเขียน algorithm ที่ดี
●
    ตัว Python เองสามารถใส่ -O ได้เวลา run โปรแกรม
    เช่น
      $ python -O example1.py
●
    ถ้าใช้ python 32 bit สามารถใช้ psyco ได้
●
    หรือใช้ PyPy (กำาลังพัฒนาอยู่)
เครื่องมือที่ใช้ในการเขียน
●   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)
Interactive shell
●   python
●   ipython
●   bpython
●   IDLE (GUI)
Libraries
●
    Library ของ python มีเยอะมาก
●
    หาได้จาก PyPI - http://pypi.python.org/pypi
●
    Library บางตัวดีกว่าตัวที่มาพร้อมกับ python เอง
    ●
        เช่น urllib3 ดีกว่า urllib2 ที่ built-in มากับ python
Q&A

More Related Content

What's hot

การเขียนฟังก์ชั่นในภาษา C
การเขียนฟังก์ชั่นในภาษา Cการเขียนฟังก์ชั่นในภาษา C
การเขียนฟังก์ชั่นในภาษา CWarawut
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาJK133
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาAeew Autaporn
 
Java Programming [9/12]: Exception Handling
Java Programming [9/12]: Exception HandlingJava Programming [9/12]: Exception Handling
Java Programming [9/12]: Exception HandlingIMC Institute
 
Multi threaded programming in c and c++ 2021-09-03
Multi threaded programming in c and c++ 2021-09-03Multi threaded programming in c and c++ 2021-09-03
Multi threaded programming in c and c++ 2021-09-03KIMVR1
 
Java-Chapter 06 File Operations
Java-Chapter 06 File OperationsJava-Chapter 06 File Operations
Java-Chapter 06 File OperationsWongyos Keardsri
 
ความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวาความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวาThanachart Numnonda
 
การเขียนคำสั่งขั้นพื้นฐาน(ภาษาC)
การเขียนคำสั่งขั้นพื้นฐาน(ภาษาC)การเขียนคำสั่งขั้นพื้นฐาน(ภาษาC)
การเขียนคำสั่งขั้นพื้นฐาน(ภาษาC)Visaitus Palasak
 
Java Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตJava Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตThanachart Numnonda
 
การเขียนคำสั่งควบคุมขั้นพื้นฐาน
การเขียนคำสั่งควบคุมขั้นพื้นฐานการเขียนคำสั่งควบคุมขั้นพื้นฐาน
การเขียนคำสั่งควบคุมขั้นพื้นฐานNookky Anapat
 
Java Programming: การจัดการกับข้อผิดพลาด
Java Programming: การจัดการกับข้อผิดพลาดJava Programming: การจัดการกับข้อผิดพลาด
Java Programming: การจัดการกับข้อผิดพลาดThanachart Numnonda
 
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซีใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซีNattapon
 
เมธอด Method
เมธอด Methodเมธอด Method
เมธอด Methodtyt13
 
บทที่ 6 คลาสและการเขียนโปรแกรม
บทที่ 6 คลาสและการเขียนโปรแกรมบทที่ 6 คลาสและการเขียนโปรแกรม
บทที่ 6 คลาสและการเขียนโปรแกรมNookky Anapat
 
Java Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุมJava Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุมThanachart Numnonda
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น2
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น2คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น2
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น2Iam Champooh
 
บทที่2
บทที่2บทที่2
บทที่2tyt13
 
บทที่ 2 ชนิดของตัว
บทที่ 2 ชนิดของตัวบทที่ 2 ชนิดของตัว
บทที่ 2 ชนิดของตัวTheeravaj Tum
 

What's hot (20)

การเขียนฟังก์ชั่นในภาษา C
การเขียนฟังก์ชั่นในภาษา Cการเขียนฟังก์ชั่นในภาษา C
การเขียนฟังก์ชั่นในภาษา C
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
 
Java Programming [9/12]: Exception Handling
Java Programming [9/12]: Exception HandlingJava Programming [9/12]: Exception Handling
Java Programming [9/12]: Exception Handling
 
Multi threaded programming in c and c++ 2021-09-03
Multi threaded programming in c and c++ 2021-09-03Multi threaded programming in c and c++ 2021-09-03
Multi threaded programming in c and c++ 2021-09-03
 
Java-Chapter 06 File Operations
Java-Chapter 06 File OperationsJava-Chapter 06 File Operations
Java-Chapter 06 File Operations
 
ความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวาความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวา
 
การเขียนคำสั่งขั้นพื้นฐาน(ภาษาC)
การเขียนคำสั่งขั้นพื้นฐาน(ภาษาC)การเขียนคำสั่งขั้นพื้นฐาน(ภาษาC)
การเขียนคำสั่งขั้นพื้นฐาน(ภาษาC)
 
Java Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตJava Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุต
 
การเขียนคำสั่งควบคุมขั้นพื้นฐาน
การเขียนคำสั่งควบคุมขั้นพื้นฐานการเขียนคำสั่งควบคุมขั้นพื้นฐาน
การเขียนคำสั่งควบคุมขั้นพื้นฐาน
 
บทที่2
บทที่2บทที่2
บทที่2
 
Java Programming: การจัดการกับข้อผิดพลาด
Java Programming: การจัดการกับข้อผิดพลาดJava Programming: การจัดการกับข้อผิดพลาด
Java Programming: การจัดการกับข้อผิดพลาด
 
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซีใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
 
เมธอด Method
เมธอด Methodเมธอด Method
เมธอด Method
 
บทที่ 6 คลาสและการเขียนโปรแกรม
บทที่ 6 คลาสและการเขียนโปรแกรมบทที่ 6 คลาสและการเขียนโปรแกรม
บทที่ 6 คลาสและการเขียนโปรแกรม
 
Python101
Python101Python101
Python101
 
Java Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุมJava Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุม
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น2
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น2คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น2
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น2
 
บทที่2
บทที่2บทที่2
บทที่2
 
บทที่ 2 ชนิดของตัว
บทที่ 2 ชนิดของตัวบทที่ 2 ชนิดของตัว
บทที่ 2 ชนิดของตัว
 

Similar to Python Course #1

บทที่ 2 พื้นฐานภาษาจาวา
บทที่ 2 พื้นฐานภาษาจาวาบทที่ 2 พื้นฐานภาษาจาวา
บทที่ 2 พื้นฐานภาษาจาวาKukkik Kanya
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น Ja Phenpitcha
 
1. ประวัติภาษาซี
1. ประวัติภาษาซี1. ประวัติภาษาซี
1. ประวัติภาษาซีmansuang1978
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานPrapatsorn Keawnoun
 
คำสั่ง ลินุกซ์ (Linux)
คำสั่ง ลินุกซ์ (Linux)คำสั่ง ลินุกซ์ (Linux)
คำสั่ง ลินุกซ์ (Linux)Arkom Thaicharoen
 
Basic linux
Basic linuxBasic linux
Basic linuxtaggi
 
Basic Linux
Basic LinuxBasic Linux
Basic Linuxminafaw2
 
ภาษาC & mathlab
ภาษาC & mathlabภาษาC & mathlab
ภาษาC & mathlabMike Suphakron
 

Similar to Python Course #1 (20)

บทที่ 2 พื้นฐานภาษาจาวา
บทที่ 2 พื้นฐานภาษาจาวาบทที่ 2 พื้นฐานภาษาจาวา
บทที่ 2 พื้นฐานภาษาจาวา
 
Ch01 administrators-tasks
Ch01 administrators-tasksCh01 administrators-tasks
Ch01 administrators-tasks
 
Php beginner
Php beginnerPhp beginner
Php beginner
 
C lu
C luC lu
C lu
 
Java
JavaJava
Java
 
Ch02 administrators-tasks
Ch02 administrators-tasksCh02 administrators-tasks
Ch02 administrators-tasks
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
 
1. ประวัติภาษาซี
1. ประวัติภาษาซี1. ประวัติภาษาซี
1. ประวัติภาษาซี
 
Editors for-linux
Editors for-linuxEditors for-linux
Editors for-linux
 
Ch17 secure-password
Ch17 secure-passwordCh17 secure-password
Ch17 secure-password
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
 
บทที่ 1
บทที่ 1บทที่ 1
บทที่ 1
 
ภาษาซีเบื้องต้น
ภาษาซีเบื้องต้นภาษาซีเบื้องต้น
ภาษาซีเบื้องต้น
 
คำสั่ง ลินุกซ์ (Linux)
คำสั่ง ลินุกซ์ (Linux)คำสั่ง ลินุกซ์ (Linux)
คำสั่ง ลินุกซ์ (Linux)
 
Basic linux
Basic linuxBasic linux
Basic linux
 
Basic Linux
Basic LinuxBasic Linux
Basic Linux
 
ภาษาC & mathlab
ภาษาC & mathlabภาษาC & mathlab
ภาษาC & mathlab
 
กลุ่ม6
กลุ่ม6กลุ่ม6
กลุ่ม6
 
Pbl2
Pbl2Pbl2
Pbl2
 
C language
C languageC language
C language
 

More from Sarunyhot Suwannachoti (8)

Avoiding Callback Hell From JavaScript
Avoiding Callback Hell From JavaScriptAvoiding Callback Hell From JavaScript
Avoiding Callback Hell From JavaScript
 
Build App with Nodejs - YWC Workshop
Build App with Nodejs - YWC WorkshopBuild App with Nodejs - YWC Workshop
Build App with Nodejs - YWC Workshop
 
The Future of JavaScript
The Future of JavaScriptThe Future of JavaScript
The Future of JavaScript
 
Build web application with express
Build web application with expressBuild web application with express
Build web application with express
 
Node.js for beginner
Node.js for beginnerNode.js for beginner
Node.js for beginner
 
The future of node
The future of nodeThe future of node
The future of node
 
RabbitMQ
RabbitMQ RabbitMQ
RabbitMQ
 
Introduction to CodeIgniter
Introduction to CodeIgniterIntroduction to CodeIgniter
Introduction to CodeIgniter
 

Python Course #1

  • 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) ● Stani's 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