ฟังก์ชันบางส่วน
ใช้ functools.partial
ฟังก์ชันบางส่วน เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
ฟังก์ชันที่กำหนดอาร์กิวเมนต์ล่วงหน้าคืออะไร
functools.partial สร้างฟังก์ชันใหม่โดยเติมอาร์กิวเมนต์บางส่วนของฟังก์ชันเดิมไว้ล่วงหน้า เปรียบเสมือนการเตรียมอาร์กิวเมนต์ไว้ก่อน เพื่อให้คุณเรียกใช้ผลลัพธ์ด้วยอาร์กิวเมนต์ที่น้อยลงได้
นำเข้าโดยใช้ from functools import partial
from functools import partial
def power(base, exp):
return base ** exp
square = partial(power, exp=2)
print(square(5))การกำหนดอาร์กิวเมนต์ตามตำแหน่งล่วงหน้า
อาร์กิวเมนต์ตามตำแหน่งที่ส่งให้ partial จะเติมพารามิเตอร์ของฟังก์ชันจากด้านซ้าย อาร์กิวเมนต์ที่เหลือจะถูกส่งให้เมื่อคุณเรียกใช้ฟังก์ชันที่กำหนดอาร์กิวเมนต์ล่วงหน้าแล้ว
from functools import partial
def multiply(a, b):
return a * b
double = partial(multiply, 2)
print(double(10))
print(double(50))การกำหนดอาร์กิวเมนต์ตามคำสำคัญล่วงหน้า
อาร์กิวเมนต์ตามคำสำคัญที่ให้กับ partial จะกลายเป็นค่าเริ่มต้น ซึ่งคุณยังสามารถเขียนทับได้ขณะเรียกใช้
from functools import partial
def greet(name, greeting='Hello'):
return greeting + ', ' + name
hola = partial(greet, greeting='Hola')
print(hola('Ada'))
print(hola('Bob', greeting='Hey'))ฟังก์ชันที่กำหนดอาร์กิวเมนต์ล่วงหน้ากับฟังก์ชันในตัว
คุณสามารถกำหนดอาร์กิวเมนต์ล่วงหน้าให้ฟังก์ชันในตัวได้เช่นกัน ในที่นี้เราสร้างตัวแยกวิเคราะห์จำนวนเต็มฐานสองจาก int
from functools import partial
binary = partial(int, base=2)
print(binary('1010'))
print(binary('1111'))ฟังก์ชันเรียกกลับที่สะอาดขึ้น
ฟังก์ชันที่กำหนดอาร์กิวเมนต์ล่วงหน้าเหมาะอย่างยิ่งสำหรับฟังก์ชันเรียกกลับที่ต้องรับฟังก์ชันแบบไม่มีอาร์กิวเมนต์หรือมีอาร์กิวเมนต์เดียว แต่คุณต้องการเตรียมบริบทไว้ล่วงหน้า
from functools import partial
def log(level, message):
return '[' + level + '] ' + message
error = partial(log, 'ERROR')
print(error('disk full'))ฟังก์ชันที่กำหนดอาร์กิวเมนต์ล่วงหน้าใน map
ฟังก์ชันที่กำหนดอาร์กิวเมนต์ล่วงหน้าเข้ากับฟังก์ชันลำดับสูงอย่าง map ได้พอดี โดยกำหนดอาร์กิวเมนต์หนึ่งตัวไว้ตายตัว ขณะที่อีกตัวเปลี่ยนไปตามแต่ละรายการ
from functools import partial
def add(a, b):
return a + b
add10 = partial(add, 10)
print(list(map(add10, [1, 2, 3])))การตรวจสอบฟังก์ชันที่กำหนดอาร์กิวเมนต์ล่วงหน้า
อ็อบเจกต์ที่กำหนดอาร์กิวเมนต์ล่วงหน้าจะแสดงฟังก์ชันที่ห่อหุ้มไว้ผ่าน .func อาร์กิวเมนต์ตามตำแหน่งที่กำหนดไว้ผ่าน .args และอาร์กิวเมนต์ตามคำสำคัญที่กำหนดไว้ผ่าน .keywords
from functools import partial
def f(a, b, c):
return (a, b, c)
p = partial(f, 1, c=3)
print(p.func.__name__)
print(p.args)
print(p.keywords)การซ้อนฟังก์ชันที่กำหนดอาร์กิวเมนต์ล่วงหน้า
คุณสามารถสร้างฟังก์ชันที่กำหนดอาร์กิวเมนต์ล่วงหน้าจากฟังก์ชันอีกตัวที่กำหนดอาร์กิวเมนต์ล่วงหน้าไว้แล้ว แล้วเพิ่มอาร์กิวเมนต์ที่ตายตัวทีละขั้นได้
from functools import partial
def volume(l, w, h):
return l * w * h
base = partial(volume, 2)
slab = partial(base, 3)
print(slab(4))ฟังก์ชันที่กำหนดอาร์กิวเมนต์ล่วงหน้ากับแลมบ์ดา
lambda สามารถทำงานเดียวกันได้ แต่ partial มักสื่อความหมายชัดเจนกว่าเมื่อต้องกำหนดอาร์กิวเมนต์ และยังแสดงฟังก์ชันที่ห่อหุ้มไว้สำหรับการตรวจสอบภายในได้
from functools import partial
def power(base, exp):
return base ** exp
cube_p = partial(power, exp=3)
cube_l = lambda b: power(b, 3)
print(cube_p(2), cube_l(2))ตัวอย่างจริง: การปัดเศษ
สร้างฟังก์ชันปัดเศษให้เหลือสองตำแหน่งทศนิยมด้วยการกำหนดอาร์กิวเมนต์ล่วงหน้าให้ฟังก์ชันในตัว round
from functools import partial
round2 = partial(round, ndigits=2)
print(round2(3.14159))
print(round2(2.71828))การกำหนดอาร์กิวเมนต์ล่วงหน้าสำหรับคลาส
functools.partialmethod ที่เกี่ยวข้องทำงานแบบเดียวกันกับเมธอดภายในนิยามคลาส โดยเติมอาร์กิวเมนต์ให้เมธอดไว้ล่วงหน้า
from functools import partialmethod
class Light:
def set(self, state):
self.state = state
return state
on = partialmethod(set, True)
off = partialmethod(set, False)
l = Light()
print(l.on())
print(l.off())ตรวจสอบความเข้าใจ
functools.partial ทำหน้าที่อะไร
สรุปทบทวน: ฟังก์ชันที่กำหนดอาร์กิวเมนต์ล่วงหน้า
คุณได้เรียนรู้ว่า functools.partial:
- สร้างฟังก์ชันใหม่โดยเติมอาร์กิวเมนต์บางส่วนไว้ล่วงหน้า ทั้งแบบตามตำแหน่งหรือแบบตามคำสำคัญ
- เปิดโอกาสให้คุณเขียนทับค่าเริ่มต้นตามคำสำคัญที่กำหนดไว้แล้วขณะเรียกใช้
- เหมาะอย่างยิ่งสำหรับฟังก์ชันเรียกกลับ
mapและการลดการเขียนซ้ำ - แสดง
.func,.argsและ.keywordsอีกทั้งมีรูปแบบที่เป็นเมธอดคือpartialmethod
from functools import partial
add = lambda a, b: a + b
plus1 = partial(add, 1)
print(plus1(41))คำถามที่พบบ่อย
บทเรียน “ฟังก์ชันบางส่วน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ฟังก์ชันบางส่วน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ฟังก์ชันบางส่วน”
ใช้ functools.partial คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ฟังก์ชันบางส่วน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ