0Pricing
Python Academy · บทเรียน

ฟังก์ชันในฐานะออบเจ็กต์ชั้นหนึ่ง

ทำความเข้าใจคลอเชอร์และการส่งฟังก์ชันเป็นอาร์กิวเมนต์

ฟังก์ชันในฐานะออบเจ็กต์ชั้นหนึ่ง เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

บทนำ

ใน Python ฟังก์ชันเป็นอ็อบเจ็กต์ชั้นหนึ่ง จึงสามารถส่งเป็นอาร์กิวเมนต์ ส่งคืน และเก็บไว้ในโครงสร้างข้อมูลได้

ฟังก์ชันคืออ็อบเจ็กต์

def double(x): return x*2 สร้างอ็อบเจ็กต์ฟังก์ชันขึ้นมา double เป็นเพียงชื่อหนึ่งเท่านั้น คุณสามารถกำหนดชื่ออื่นให้ได้: fn = double และ fn(5) จะทำงานได้
def double(x): return x * 2
fn = double
print(fn(5))
print(type(fn))

การส่งฟังก์ชันเป็นอาร์กิวเมนต์

def apply(func, val): return func(val) — func เป็นอาร์กิวเมนต์ที่เรียกใช้งานได้ นี่คือการเขียนโปรแกรมระดับสูง
def apply(func, val): return func(val)
print(apply(abs, -7))
print(apply(str, 42))

การเก็บฟังก์ชันในคอนเทนเนอร์

ops = [add, sub, mul] ใช้เก็บอ็อบเจ็กต์ฟังก์ชันไว้ในรายการ จากนั้นวนซ้ำและเรียกใช้ได้ดังนี้: for op in ops: op(a, b)
ops = [str.upper, str.lower, str.strip]
for op in ops:
    print(op('  Hello  '))

การส่งคืนฟังก์ชัน

ฟังก์ชันสามารถส่งคืนฟังก์ชันอื่นได้ ตัวอย่างเช่น def make_adder(n): def adder(x): return x+n; return adder
def make_adder(n):
    def adder(x): return x + n
    return adder
add10 = make_adder(10)
print(add10(5), add10(20))

คลอเชอร์

คลอเชอร์จะเก็บค่าตัวแปรจากขอบเขตที่ครอบอยู่ ฟังก์ชันภายในจะ “ปิดล้อม” n ที่อยู่ใน make_adder
def counter(start=0):
    count = [start]
    def inc():
        count[0] += 1
        return count[0]
    return inc
c = counter()
print(c(), c(), c())

แลมบ์ดาในฐานะฟังก์ชันไม่ระบุชื่อ

lambda x: x*2 เป็นฟังก์ชันไม่ระบุชื่อที่มีนิพจน์เดียว เหมาะสำหรับการเรียกกลับสั้น ๆ แต่หากตรรกะซับซ้อน ควรตั้งชื่อฟังก์ชัน
nums = [3, 1, 4, 1, 5]
print(sorted(nums, key=lambda x: -x))

map() และ filter()

map(func, iterable) นำ func ไปใช้กับสมาชิกแต่ละตัว ส่วน filter(pred, iterable) จะเก็บสมาชิกที่ pred ให้ค่าเป็น True
nums = [1, 2, 3, 4, 5]
print(list(map(lambda x: x**2, nums)))
print(list(filter(lambda x: x%2==0, nums)))

functools.reduce()

reduce(func, seq) จะรวมลำดับข้อมูลเข้าด้วยกัน: reduce(lambda a,b: a+b, [1,2,3,4]) ให้ผลลัพธ์เป็น 10
from functools import reduce
print(reduce(lambda a,b: a*b, [1,2,3,4,5]))

การตรวจสอบการเรียกใช้งาน

callable(obj) จะคืนค่า True หากสามารถเรียกใช้ obj ได้ ฟังก์ชัน คลาส และอ็อบเจ็กต์ที่มี __call__ ล้วนเรียกใช้งานได้
print(callable(print))
print(callable(42))
class C:
    def __call__(self): pass
print(callable(C()))

การตรวจสอบรายละเอียดฟังก์ชัน

func.__name__, func.__doc__, func.__annotations__, inspect.signature(func) ให้ข้อมูลเมทาดาทาของฟังก์ชัน
import inspect
def greet(name: str) -> str:
    '''Returns a greeting.'''
    return f'Hi {name}'
print(greet.__name__, greet.__annotations__)
print(inspect.signature(greet))

ตรวจสอบอย่างรวดเร็ว

คลอเชอร์ใน Python คืออะไร

ทบทวน

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

เรียนรู้ต่อไป

คุณมีความก้าวหน้าอย่างยอดเยี่ยม โปรดเรียนรู้ต่อไปเพื่อทำความเข้าใจแนวคิดถัดไปอย่างเชี่ยวชาญ

คำถามที่พบบ่อย

บทเรียน “ฟังก์ชันในฐานะออบเจ็กต์ชั้นหนึ่ง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ฟังก์ชันในฐานะออบเจ็กต์ชั้นหนึ่ง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ฟังก์ชันในฐานะออบเจ็กต์ชั้นหนึ่ง”

ทำความเข้าใจคลอเชอร์และการส่งฟังก์ชันเป็นอาร์กิวเมนต์ คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ฟังก์ชันในฐานะออบเจ็กต์ชั้นหนึ่ง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ฟังก์ชันในฐานะออบเจ็กต์ชั้นหนึ่ง
  2. การเขียนเดคอเรเตอร์แบบกำหนดเอง
  3. เดคอเรเตอร์ @property
  4. @classmethod และ @staticmethod
← กลับไปที่ Python Academy