บันทึกช่วยจำ Python
เผยแพร่เมื่อ 19 November 2023
ติดตั้ง ไพธอน บน วินโดวส์
กำลังรัน Python
cd mon_projet
python -m venv mon_venv
source mon_venv/bin/activate
# Sur windows
mon_venv\Scripts\activate
deactivate
ข้อกำหนดการติดตั้ง
pip install -r requirements.txt
การเริ่มต้น
รูปแบบการออกแบบของ GoF ใน Python
รูปแบบการออกแบบ GoF เป็นชุดของ 23 รูปแบบการออกแบบที่ได้ถูกอธิบายไว้ในหนังสือ "Design Patterns: Elements of Reusable Object-Oriented Software".
| ชื่อ | คำอธิบาย |
|---|---|
Factory Method |
สร้างอ็อบเจกต์โดยไม่ต้องระบุคลาสที่แน่นอนที่จะนำมาอินสแตนซ์ |
Abstract Factory |
สร้างกลุ่มของวัตถุที่เกี่ยวข้องกันหรือขึ้นต่อกัน โดยไม่ต้องระบุคลาสที่เป็นรูปธรรม (concrete class) ของวัตถุเหล่านั้น |
ผู้สร้าง |
แยกการสร้างวัตถุที่มีความซับซ้อนออกจากตัวแทน (representation) ของมัน เพื่อให้กระบวนการสร้างแบบเดียวกันสามารถสร้างตัวแทนที่แตกต่างกันได้ |
ต้นแบบ |
สร้างวัตถุใหม่โดยการคัดลอกโปรโตไทป์ที่มีอยู่ |
Singleton |
จำกัดการสร้างอินสแตนซ์ของคลาสให้มีเพียงวัตถุเดียว |
อะแดปเตอร์ |
แปลงอินเทอร์เฟซของคลาสหนึ่งให้เป็นอีกอินเทอร์เฟซหนึ่งที่ไคลเอนต์ต้องการ |
สะพาน |
แยกส่วนการนามธรรม (abstraction) ออกจากการนำไปใช้งาน (implementation) เพื่อให้ทั้งสองส่วนสามารถเปลี่ยนแปลงได้อย่างเป็นอิสระต่อกัน |
คอมโพสิต |
จัดกลุ่มอ็อบเจกต์ในโครงสร้างแบบต้นไม้เพื่อแสดงลำดับชั้นแบบส่วนประกอบ-ส่วนรวม (part-whole hierarchies) |
ตัวตกแต่ง (Decorator) |
ผูกความรับผิดชอบเพิ่มเติมเข้ากับวัตถุแบบไดนามิก |
Facade |
จัดเตรียมอินเทอร์เฟซหนึ่งเดียวให้กับชุดของอินเทอร์เฟซในระบบย่อย |
Flyweight |
ลดต้นทุนในการสร้างและใช้งานอ็อบเจกต์ที่มีน้ำหนักเบา |
พร็อกซี |
จัดหาตัวแทนหรือตัวสำรองสำหรับวัตถุอื่นเพื่อควบคุมการเข้าถึงวัตถุนั้น |
Chain of Responsibility |
ช่วยให้วัตถุมากกว่าหนึ่งชิ้นสามารถประมวลผลคำขอได้ |
คำสั่ง |
ห่อหุ้มคำขอไว้ในออบเจ็กต์ ซึ่งช่วยให้สามารถกำหนดค่าไคลเอนต์ด้วยคำขอ คิว หรือล็อกที่แตกต่างกัน และรองรับการดำเนินการที่สามารถยกเลิกได้ |
ล่าม |
ให้การนำเสนอไวยากรณ์ของภาษาหนึ่ง และใช้การนำเสนอนี้เพื่อตีความประโยคในภาษานั้น |
ตัววนซ้ำ (Iterator) |
ให้วิธีการในการท่องผ่านองค์ประกอบต่างๆ ของอ็อบเจกต์แบบรวม (aggregate object) ตามลำดับ โดยไม่ต้องเปิดเผยการแสดงผลภายใน (underlying representation) ของอ็อบเจกต์นั้น |
ตัวกลาง |
ช่วยลดการพึ่งพากันที่ซับซ้อนระหว่างวัตถุ โดยการทำให้วัตถุเหล่านั้นสื่อสารกันผ่านวัตถุตัวกลาง (mediator object) เท่านั้น |
บันทึกช่วยจำ |
มอบความสามารถในการคืนค่าวัตถุให้กลับสู่สถานะก่อนหน้า (โดยไม่ละเมิดการห่อหุ้มหรือ encapsulation) |
ผู้สังเกตการณ์ |
กำหนดความสัมพันธ์แบบหนึ่งต่อหลายระหว่างออบเจ็กต์ เพื่อที่ว่าเมื่อออบเจ็กต์หนึ่งเปลี่ยนสถานะ ออบเจ็กต์ที่ขึ้นตรงอยู่ทั้งหมดจะได้รับการแจ้งเตือนและอัปเดตโดยอัตโนมัติ |
สถานะ |
ช่วยให้วัตถุสามารถเปลี่ยนพฤติกรรมได้เมื่อสถานะภายในของวัตถุนั้นเปลี่ยนแปลงไป |
กลยุทธ์ |
กำหนดตระกูลของอัลกอริทึม ห่อหุ้มแต่ละอัลกอริทึม และทำให้สามารถสลับเปลี่ยนกันได้ |
Template Method |
กำหนดโครงร่างของอัลกอริทึมไว้ในเมธอด โดยให้คลาสย่อยเป็นผู้กำหนดขั้นตอนบางส่วน |
ผู้เยี่ยมชม |
ช่วยให้สามารถกำหนดการดำเนินการใหม่ที่จะกระทำกับโครงสร้างของอ็อบเจกต์ได้ โดยไม่ต้องเปลี่ยนแปลงคลาสของอ็อบเจกต์ที่ถูกดำเนินการนั้น |
การโปรแกรมเชิงฟังก์ชัน
ห้องสมุด |
URL |
คำอธิบาย |
PyMonad |
PyMonad คือการนำโครงสร้างข้อมูลแบบ monad มาประยุกต์ใช้ใน Python โดยอ้างอิงจากภาษาโปรแกรมอย่าง Haskell และ F# พร้อมทั้งมีการนำประเภทของ monad ที่ใช้บ่อยที่สุดในการเขียนโปรแกรมเชิงฟังก์ชันมาปรับใช้https://www.miguelfarrajota.com/2021/06/monads-in-python-with-pymonad/[บทความ] |
|
PyFunctional |
PyFunctional คือไลบรารี Python สำหรับการเขียนโปรแกรมเชิงฟังก์ชัน (functional programming) ซึ่งมีเครื่องมือสำหรับทำงานกับฟังก์ชันบริสุทธิ์ (pure functions) และ iterable |
|
Toolz |
Toolz เป็นไลบรารี Python สำหรับการเขียนโปรแกรมเชิงฟังก์ชัน (functional programming) ซึ่งมีเครื่องมือสำหรับการทำงานกับฟังก์ชันบริสุทธิ์ (pure functions) และออบเจ็กต์ที่วนซ้ำได้ (iterables) |
|
Fn.py |
Fn.py` เป็นไลบรารี Python สำหรับการเขียนโปรแกรมเชิงฟังก์ชัน ซึ่งมีเครื่องมือสำหรับการทำงานกับ Pure Functions และ Iterables |
|
มะพร้าว |
Coconut เพิ่มฟีเจอร์หลายอย่างให้กับ Python สำหรับการเขียนโปรแกรมเชิงฟังก์ชัน ซึ่งรวมถึง pattern matchinghttps://stackoverflow.com/questions/11909681/are-there-pattern-matching-functions-in-python-like-this[การสนทนา sof] |
ผลข้างเคียง
ลูป
# impérative way
result = []
for i in inputs:
x = f(g(i))
result.append(x)
# idiomatic way
result = map(comp(f,g), inputs)