ข้อมูลชนิดดิกชันนารี่ของไพธอน ดีหลายอย่าง แต่เสียตรงไม่สามารถทำงานแบบ Stack (First in, Last out) ได้

ลองเขียนคลาสง่าย ๆ สร้าง tuple ใน list เพื่อเลียนแบบดิกชันนารี่ที่สามารถเก็บข้อมูลเป็น stack ได้

class StackDict:

  def __init__(self):
    self.data = []
    self._keys = []
    self._items = []

  def __repr__(self):
    return repr(dict(self.data))

  def __setitem__(self, key, item):
    if key in self._keys:
      index = self._keys.index(key)
      self.data[index] = (key, item)
      self._items[index] = item
    else:
      self.data.append((key, item))
      self._keys.append(key)
      self._items.append(item)
Topic: 
 

เอามาจาก ug's Python CGI scripts: cookie.py

การเซ็ต Cookie
สร้างไฟล์ชื่อ setcookie.py

#!/usr/bin/env python
import Cookie

c1 = Cookie.SimpleCookie()
# Create a cookie in c1
# This will be temporary and will disappear when the session is closed
c1["cracker"] = "hello"
# The RFC says you should always set this but it seems to work ok without it
c1["cracker"]["version"] = 1

# Create another one
c1["bisquit"] = "whatever"
# Make the browser store it for one hour
c1["bisquit"]["max-age"] = 3600 # Time to keep, in seconds
c1["bisquit"]["expires"] = 3600 # Obsolete, but Netscape still seems to require it
c1["bisquit"]["version"] = 1

# Print the headers that sets the cookies
 

default agrument มีประโยชน์ในการกำหนดค่าปริยายให้กับตัวแปรที่ส่งผ่านไปให้ฟังก์ชั่น
ขอยกตัวอย่างเป็นคลาสแทน

>>> class X:
...   def __init__(self, a=1, b=2):
...     self.a = a
...     self.b = b
...     print "X.a=%s, X.b=%s" % (self.a, self.b)
... 

>>> x = X()
X.a=1, X.b=2

>>> x = X(11)
X.a=11, X.b=2

>>> x = X(a=111)
X.a=111, X.b=2

>>> x = X(b=222)
X.a=1, X.b=222

ตัวแปร a และ b เป็นตัวแปรที่เป็น default argument

การสืบทอดคลาสมักนิยมใช้รูปแบบอาร์กิวเมนต์เป็น *argv **keyw

 

การสืบทอดคลาสในไพธอน ถ้าเราสร้างเมธอด __init__ ขึ้นมาใหม่
เขาจะไม่เรียกใช้เมธอด __init__ ของคลาสแม่โดยอัตโนมัติ
เราจึงต้องเขียนสั่งให้เรียกเมธอดของคลาสแม่ด้วยตนเอง

การอ้างถึงคลาสแม่ในไพธอน จะอ้างถึงแบบตรง ๆ เช่น

>>> class X:
...   def __init__(self):
...   print "print from class X"
... 
>>> class Y(X):
...   def __init__(self):
...     X.__init__(self)
...     print "print from class Y"
... 
>>> y = Y()
print from class X
print from class Y
>>> 

หรือ

>>> class Y(X):
Topic: 
 

ทีแรกจะศึกษาเพื่อเอามาทำ session แต่คิดว่าคงไม่ค่อยเหมาะ เพราะเปลืองหน่วยความจำ
ขอบันทึกไว้หน่อยครับ

สมมุติว่าต้องการทำคำสั่ง print "ABC" เมื่อเวลาผ่านไป 30 วินาที
แบบแรกใช้โมดูล threading ใช้คำสั่งว่า

>>> def p():
...  print "ABC"
...

>>> import threading
>>> ss = threading.Timer(30, p)
>>> ss.start()
(ผ่านไป 30 วินาที) ABC

จับการทำงานของโปรเซสด้วย top ได้ว่า 0.0%CPU 2.7%MEM

Pages

Subscribe to ThaiTux.info RSS