เรียนรู้ไพธอน

7. July 2009

python-logo

เพิ่งเริ่มเห็นว่าเป็นภาษาที่เป็นประโยชน์หลายอย่างเมื่อไม่นานมานี้ครับ ยกตัวอย่างเช่น

  • Google App Engine ก็ใช้ Python ได้
  • .NET ก็มี IronPython ให้ใช้
  • บน Linux และ Unix ก็มักจะมีตัวแปลภาษา Python ติดตั้ง ใช้เป็นคงช่วยงานพวก automation ได้ระดับนึง โดยไม่ต้องไปศึกษาพวก shell script ที่ดูยากกว่า
  • ไลบรารีเจ๋งๆหลายอย่างของ C++ ที่อาจจะไม่มี “ตัวหุ้ม” (Wrapper) สำหรับภาษาอื่น แต่ก็มักจะมีของ Python ให้เห็นอยู่เนืองๆ เช่น pyOgre, pyQT, …

ก่อนหน้านี้ซักระยะนึง เคยอ่าน Dive into Python ครับ เค้าบอกว่าเป็น Python สำหรับโปรแกรมเมอร์มีกระสบการณ์ เข้าไปอ่านก็อ่านรู้เรื่องนะ แต่มันใช้พลังมากไปหน่อย ก็เลยเลิกอ่าน …

ความพยายามครั้งใหม่เลยลองไปหาหนังสือที่ง่ายกว่ามา คือ Byte of Python อันนี้เป็นสำหรับมือใหม่จริงๆ อธิบายค่อนข้างละเอียด คนเขียนโปรแกรมเป็นแล้วก็พอเอาไปอ่านผ่านๆเร็วๆได้ อ่านจบจะเริ่มเข้าใจ syntax ของ Python มากขึ้น แล้วเขียนโปรแกรมง่ายๆได้ หลังจากจบเล่มนี้ก็เริ่มมีความมั่นใจมากขึ้นที่จะกลับไปอ่าน Dive into Python

หลังจากที่เริ่มเข้าใจ syntax ของภาษา และการเอา module ภายนอกมาใช้ ก็เลยเขียนโปรแกรมง่ายๆเก็บไว้ดู เป็นโปรแกรม TermTweet โปรแกรมเดียวกับที่ใช้เปรียบเทียบ C++ และ C# เมื่อวันก่อน มาเขียนใหม่ ผลลัพธ์ … ต้องบอกว่าแอบอายแทนซีชาร์ปลูกรักเล็กน้อย

>_<

PyTermTweet

import re
import urllib2
from xml.dom.minidom import parse,getDOMImplementation

if __name__ == '__main__':
target = 'http://twitter.com/statuses/user_timeline/6380022.rss'
res_file = urllib2.urlopen(target)
dom = parse(res_file)

elements = dom.getElementsByTagName('item')
for elem in elements:
text = elem.childNodes[1].firstChild.data
url = re.search(r'(http://[^\s]*)', text)
print text
if url != None:
print "link: ", url.group(1)
print '--------------------------------'
 

สรุปข้อดีที่พบเห็น ดังต่อไปนี้

  • การใช้การจัดย่อหน้าแทน block ทำให้ไม่ต้องใช้ { และ } ทำให้โค้ดอ่านง่ายขึ้น ล่ะมั้ง
  • เขียนๆไปแล้วรู้สึกตลอดเวลา ว่า Python ออกแบบมาให้พิมพ์สั้น และมีความหมายที่สุด เช่น else if กลายเป็น elif หรือ Null/Nil กลายเป็น None หรือ regex กลายเป็น re หรือ การตัด do-while ออกไป และอีกมากมาย
  • โครงสร้างข้อมูลที่ใช้กันบ่อยๆในการเขียนโปรแกรม เช่น list หรือ dictionary มีให้ใช้ทันที และใช้ง่ายมาก (dict = {‘A’:4.0 , ‘A+’: 3.5}) ต่างจากภาษาพวก .NET หรือ Java
  • ด้วยความที่เป็น Dynamic Typing ทำให้ไม่ต้องระบุประเภทของตัวแปร โดยตัวแปลภาษามันจะเข้าใจได้เองว่าแต่ละตัวเป็น Type อะไร โค้ดเลยค่อนข้างกระชับ อย่างที่เห็นด้านบน

ณ วันเดียวกัน ไอกร ก็บ่นมาว่า ภาษามันไม่มี interface ให้ใช้ ก็เลยไปอ่านเจอเรื่อง Duck Typing สรุปก็คือว่า Python มันไม่มี Constraint ในรูปแบบของการ Inheritance หรือการ implement interface

สมมติว่ามี method นึงรับพารามิเตอร์เข้ามา แล้วเรียกใช้ method Fly() กับ Sleep() อะไรก็ตามที่ implement สอง method นี้ก็ pass ไปให้ได้ทั้งนั้น มันเลยเป็นที่มาของชื่อ Duck Typing

“ถ้าเห็นนกที่เดินได้เหมือนเป็ด ว่ายน้ำได้เหมือนเป็ด
ร้องได้เหมือนเป็ด นกตัวนั้นเป็นเป็ด”

ข้อเสียของ Duck Typing ตามที่มีการวิพากษวิจารณ์กัน คือ มันทำให้การหลีกเลี่ยงข้อผิดพลาดที่เกิดจากการใช้ Type ผิดนั้น ต้องใช้ “แรง” ในการ Test เยอะขึ้นพอสมควร แล้วการเขียนหรือพัฒนาต่อโดยไม่ทำให้เกิดข้อผิดพลาดด้าน Type เพิ่มขึ้นในอนาคตนั้น ก็ต้องใช้ความเข้าใจในตัวโค้ดที่ทำงานด้วยในระดับหนึ่ง รวมถึงต้องการ Documentation ที่ชัดเจนและละเอียด .. ตรงกับที่ไอกรบ่นเมื่อวานเป๊ะๆ ว่ามันต้องไปไล่อ่าน Class เพิ่มอีก 4 – 5 Classes

เรียนรู้กันต่อไปครับ :)

OOAD ,

Comments

7/7/2009 3:13:43 PM #
เมื่อวานก็นั่งอ่านเรื่อง Duck Typing เหมือนกัน เพราะต้องทำ รายงาน : www.cp.eng.chula.ac.th/.../viewtopic.php?t=11772 ส่ง

เข้าใจว่า Python มันถูกออกแบบมาให้เป็นเป็ดมากกว่า

จริงๆ การตรวจอบเห็นว่ามีน function ที่ช่วยเราตรวจสอบได้เหมือนกัน

แต่ว่าเอาเข้าจริงๆ ก็คงต้องไปไล่ class ดูนั่นแหละ อ้วก

ปล. เทียบ C++, C#, Python ---- Python สวยสุดแล้ว
ปล.2 Ruby หล่อสุดนะ
chakrit
chakrit
7/7/2009 7:32:55 PM #
Duck typing มันมักจะมากับ Convention over Configuration ด้วยนะ

คือพยายามทำตาม Convention ที่คนส่วนใหญ่เขาใช้กัน ก็จะลดปัญหาที่ว่ามาได้ (บ้าง)

...

ลองเล่น Django ดูยัง?
7/8/2009 3:43:49 AM #
โอ้วว หาอาวุธใหม่สินะ

เคยเริ่มอ่าน Dive into Python เหมือนกันว่ะ อ่านอยู่ซักพัก แล้วก็เจอเรื่องแทรกเข้ามาเรื่อยๆ
จนไม่ได้กลับไปอ่านต่อเลย T-T
7/8/2009 2:59:36 PM #
Dive into python นี่อ่านจบก็เป็นเซียนเลย
7/8/2009 10:34:21 PM #
@hybridknight ป้อกแลงนี่นำสมัยจริงๆ สอนได้กระแสมาก
@chakrit คงได้ลองเร็วๆนี้ครับ Smile ได้ข่าวว่าใช้ได้บน GAE ง่ายๆแล้วด้วยยิ่งน่าลองใหญ่
@teerapap อาวุธใหม่เข้าคลังแสงแล้วครับ .. Python GET!!!
@wiennat เป็นโหมดเซียนแล้วจะเตะแรงขึ้น ตาเปลี่ยนเป็นตากบรึเปล่าครับ (???)
7/9/2009 12:57:48 AM #
@m3rlinez proglang ไม่ได้สอนครับ เค้าให้เลือกภาษาไปทำรายงาน (อะไรก็ได้ยกเว้น C, C++, Java)
7/9/2009 10:39:57 PM #
ดีใจจัง.. มีคนเขียน python เพิ่มขึ้นอีกคนแล้ว...

ตอนผมหัด... ผมอ่าน Tutorial ของ Python ครับ (กด F1 ที่ Python IDLE)
มันเขียนไว้ชัดเจนระดับนึงเลย (นั่งดูตัวอย่างโค้ดอย่างเดียว)

เข้าใจว่าคนนิยมใช้ Python ทำ rapid prototype ครับ... พอโปรแกรมเวิร์คแล้ว แต่โปรแกรมรันช้า ก็จะทำ profile เพื่อดูว่า function ไหนกินแรงมาก...

แล้วก็อาจจะเขียนเฉพาะส่วนนั้นเป็นภาษา C ครับ
7/13/2009 3:30:17 AM #
@hybridknight i c Smile
@nattster ตอนนี้ผมก็ชอบ Python ที่ syntax มันดูกระชับดีนะครับ ยังไม่ได้ลองเรื่องพวก lib + framework เสริมเลย
ต้องดูต่อไปก่อนว่าจะเขียนไปได้อีกนานแค่ไหน 55+
Comments are closed