Learning AtlasIT Support → Cybersecurity
คลังบทอ่าน13.2 / ไพธอนและงานอัตโนมัติบทถัดไป
สารบัญบทอ่าน / Python and Automation / 13.2
04 · เขียนโค้ดและนำระบบไปใช้ · บท 13.2

Reusable Code

โค้ดใช้ซ้ำ

เมื่อโค้ดทำงานได้ ให้แบ่งเป็นส่วนที่เรียกใช้ซ้ำและทดสอบแยกได้

4 หัวข้อคำอธิบายในหน้านี้ภาพอธิบายและกลไกทีละส่วน
หัวข้อในบทนี้
ศัพท์ในบทนี้ · กดคำที่ขีดเส้นใต้ในเนื้อหาเพื่อดูความหมายได้ด้วย
RAM
หน่วยความจำหลักเก็บข้อมูลที่กำลังใช้ โดยทั่วไปข้อมูลหายเมื่อไม่มีไฟ
จากหลักการไปถึงกลไก

ฟังก์ชันรับค่าและคืนผลให้ผู้เรียก

Function ห่อขั้นตอนที่มีงานชัด Parameter เป็นชื่อรับข้อมูล Argument เป็นค่าที่ผู้เรียกส่ง Return ส่งผลกลับไปยังตำแหน่งเรียก Scope กำหนดว่าชื่อใดมองเห็นได้ การแยกส่วนนี้ช่วยทดสอบและใช้ซ้ำ โดยไม่ให้ทุกขั้นพึ่งตัวแปรส่วนกลางที่เปลี่ยนจากที่ใดก็ได้

ลำดับงาน · อ่านตามลูกศรฟังก์ชันรับค่าและคืนผลให้ผู้เรียก
  1. Call

    ผู้เรียกส่ง argument เช่น normalize_name(' Ann ')

  2. Parameter

    ฟังก์ชันรับชื่อ text ในขอบเขตที่กำหนด ไม่จำเป็นต้องชื่อเดียวกับฝั่งเรียก

  3. Work

    ทำขั้นตอนหนึ่งที่อธิบายได้ เช่นตัดช่องว่างโดยไม่เปลี่ยนแหล่งข้อมูลอื่น

  4. Return

    คืน 'Ann' ให้ผู้เรียกเลือกใช้ต่อ print อย่างเดียวไม่ได้คืนค่านี้

  5. Module

    จัดฟังก์ชันในโมดูลและ import ความสามารถที่ต้องใช้ ไลบรารีก็มีรุ่นและกติกาของตน

ถ้าไม่ return ค่าที่ออกจากการเรียกตามปกติจะเป็น None ฟังก์ชันที่อ่านง่ายบอก input output และผลข้างเคียง เช่นเขียนไฟล์ ชื่อที่ชัดและขั้นสั้นช่วยให้แก้ได้ แต่ยังต้องทดสอบข้อมูลขอบ เช่นค่าว่าง ข้อมูลผิดชนิด และข้อมูลที่ไม่พบ

01 / 04

ฟังก์ชันและพารามิเตอร์Functions and Parameters · 13.2.1

Function รวมงานที่มีชื่อ Parameters เป็นข้อมูลที่รับเข้ามา

Function รวมงานที่เรียกซ้ำได้ def กำหนดชื่อและ parameter ส่วน argument คือค่าที่ส่งตอนเรียก ตั้งชื่อให้บอกงานและระบุ input ที่ต้องใช้เพื่อลดการพึ่งตัวแปรนอกฟังก์ชัน

เทียบหน้าที่เพื่อไม่สับสน
•Parameter

ชื่อรับค่าในนิยาม

•Argument

ค่าที่ส่งตอนเรียก

•Function body

งานที่ใช้ค่ารับมา

def is_failed(status): return status == "failed" ใช้ได้กับหลาย event แยกการอ่านไฟล์ออกจากการตรวจ status ทำให้ส่วนตรวจใช้กับข้อมูลที่อยู่ใน memory และตรวจพฤติกรรมได้ง่าย

ค่ารับกับค่าคืน
def is_failed(status):
    return status == "failed"

result = is_failed("success")
print(result)

status เป็น parameter ข้อความ success เป็น argument ค่าที่ return คือ False ส่วน print ใช้แสดงผลที่คืนมา แยกการคำนวณออกจากการแสดงผลเพื่อนำ function ไปใช้ต่อได้

def allowed(name, users): return name in users ประกาศสอง parameters ส่วน allowed("Aysel", ["Aysel", "Mew"]) ส่งสอง arguments ฟังก์ชันคืน Boolean ที่ผู้เรียกนำไปใช้กับ if ต่อได้ ตัวอย่างนี้เป็นการตรวจสมาชิกในรายการ ไม่ใช่ระบบ authentication จริง

การ print ว่า allowed ให้ข้อความบนจอ แต่ return ส่งค่ากลับสำหรับการใช้ต่อ จึงต้องเลือกตามว่าโค้ดส่วนถัดไปต้องการข้อมูลหรือคนอ่านต้องการข้อความ

ที่มาของหัวข้อนี้ · 2 รายการ

คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส

เอกสารหลักที่ใช้ตรวจแนวคิดเพิ่มเติม

02 / 04

ค่าคืนและขอบเขตตัวแปรReturn Values and Scope · 13.2.2

Return ส่งค่ากลับให้ผู้เรียก Scope กำหนดว่าตัวแปรมองเห็นจากตรงไหน

return ส่งค่าจากฟังก์ชันกลับและจบการเรียกนั้น print แสดงข้อความแต่ไม่ได้คืนค่าแบบเดียวกัน Scope กำหนดว่าชื่อเข้าถึงได้ที่ไหน ตัวแปร local ในฟังก์ชันไม่ควรถูกคาดหวังว่าจะมีนอกฟังก์ชัน

เทียบหน้าที่เพื่อไม่สับสน
•Local scope

ค่าภายในการเรียก

•Return value

ผลที่ผู้เรียกนำไปใช้

•Side effect

การเปลี่ยนสิ่งนอกค่าคืน

ฟังก์ชันที่ print ผลรวมแล้วไม่มี return จะให้ None เมื่อเอาไปคำนวณต่อ ส่งค่าผ่าน parameter และ return แทนแก้ global โดยไม่จำเป็น เพื่อลดผลข้างเคียงที่ติดตามยาก

Return, Print and Scope (คืนค่า แสดงค่า และขอบเขตชื่อ)

print ส่งการแสดงผลไป stream ของมัน ส่วน return ส่ง object ให้ผู้เรียกนำไปใช้ต่อ ฟังก์ชันที่ print ว่า allowed แต่ไม่คืน Boolean ยังได้ None ตามการจบปกติ จึงไม่ใช้ข้อความที่เห็นบนจอเป็นค่า decision ของผู้เรียก

Local names อยู่ในบริบทฟังก์ชันตามกติกาของ Python ชื่อที่เหมือนตัวแปรข้างนอกอาจเป็นคนละ binding การเปลี่ยน global state ทำให้ลำดับเรียกมีผลและทดสอบยากขึ้น จึงควรออกแบบ parameters และผลคืนชัด รวมผลข้างเคียงที่ต้องทำจริง

ที่มาของหัวข้อนี้ · 2 รายการ

คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส

เอกสารหลักที่ใช้ตรวจแนวคิดเพิ่มเติม

03 / 04

โมดูลและไลบรารีModules and Libraries · 13.2.3

Module รวมโค้ดเป็นไฟล์ Library เป็นชุดความสามารถที่นำมาใช้เพิ่ม

Module เป็นไฟล์หรือหน่วยโค้ดที่ import ใช้ Library รวมความสามารถหลายหน่วย Standard library มากับ Python ส่วน package ภายนอกมีรุ่น license และความเสี่ยง dependency ที่ต้องดู

เทียบหน้าที่เพื่อไม่สับสน
•Import

นำชื่อจาก module มาใช้

•Standard library

ความสามารถที่มาพร้อมภาษา

•Dependencies

package เพิ่มที่โครงการพึ่ง

import re ใช้ regex ใน standard library ไม่ต้องติดตั้งเพิ่ม การตั้งชื่อไฟล์ว่า re.py อาจบัง module ที่ต้องการ ระบุแหล่งติดตั้งและรุ่น package ภายนอกเพื่อให้โครงการรันซ้ำได้

Built-in functions (ฟังก์ชันมีให้ในภาษา)

Python มีฟังก์ชันอย่าง len() type() และ print() ที่เรียกได้โดยไม่ import len() คืนจำนวนตาม object เช่นจำนวนสมาชิก list แต่ไม่ใช่ขนาด ของ object อย่าใช้ชื่อตัวแปรว่า list หรือ str จนบังชื่อ built-in ที่ต้องใช้

ที่มาของหัวข้อนี้ · 2 รายการ

คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส

04 / 04

การอ่านโค้ดให้ง่ายReadability · 13.2.4

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

Readability ทำให้คนรู้ว่าโค้ดรับอะไร ทำอะไร และผิดได้ตรงไหน ใช้ชื่อที่สื่อความหมาย ฟังก์ชันขนาดเหมาะ และ comment อธิบายเหตุผล ไม่อธิบายทุกบรรทัดที่อ่านได้อยู่แล้ว

เทียบหน้าที่เพื่อไม่สับสน
•Naming

ชื่อบอกหน้าที่

•Structure

แบ่งงานให้ติดตามได้

•Documentation

เหตุผลและเงื่อนไขสำคัญ

failed_logins ชัดกว่า x ถ้าหลัง parsing มีหลายขั้นให้แยก normalize กับ evaluate การจัดรูปแบบช่วยอ่าน แต่ไม่รับรองว่าตรรกะถูก ต้องตรวจ input และพฤติกรรมด้วย

ที่มาของหัวข้อนี้ · 1 รายการ

คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส

เชื่อมความเข้าใจ

นำศัพท์มาเชื่อมกับงาน

ตัวอย่างให้เห็นภาพ

แยกฟังก์ชันอ่านไฟล์กับฟังก์ชันกรองรายการ ทำให้ทดสอบส่วนกรองโดยไม่เปิดไฟล์จริง

สิ่งที่บทนี้เชื่อมไว้

เมื่อโค้ดทำงานได้ ให้แบ่งเป็นส่วนที่เรียกใช้ซ้ำและทดสอบแยกได้

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

บันทึกในเบราว์เซอร์นี้
บทเรียนที่เกี่ยวข้องและที่มาของบทอ่าน

transcript ที่เคยใช้ตรวจแนวคิดพื้นฐานและตัวอย่างบางส่วน: T0059 · Automate Cybersecurity Tasks with Python คำอธิบายเป็นการเขียนใหม่ ไม่ใช่การแปลครบทุกประโยค ภาพและตัวอย่างเป็นการเรียบเรียงเพื่อเชื่อมความเข้าใจ

คำอธิบายหน้านี้เขียนใหม่ตามหัวข้อใน Atlas รายการด้านล่างเป็นชื่อ Video/Reading ที่เคยจับคู่ไว้ แสดงไว้ให้ตรวจที่มาของชื่อหัวข้อ และไม่รับรองว่าคอร์สสอนทุกส่วนของคำอธิบายนี้

Python · Tutorial ↗