ฟังก์ชันใน Python ได้รับการกล่าวขานว่าอยู่ในลำดับที่สูงกว่า หมายความว่าสามารถส่งผ่านเป็นอาร์กิวเมนต์ไปยังฟังก์ชันอื่นและ/หรือสามารถส่งคืนฟังก์ชันอื่นได้เช่นกัน โมดูล functools มียูทิลิตี้ที่สำคัญสำหรับฟังก์ชันลำดับที่สูงขึ้น
ฟังก์ชันบางส่วน ()
ฟังก์ชันนี้ส่งคืนอ็อบเจ็กต์ 'บางส่วน' ที่เรียกได้ วัตถุนั้นมีลักษณะเหมือนฟังก์ชัน ฟังก์ชันบางส่วน () ได้รับฟังก์ชันอื่นเป็นอาร์กิวเมนต์และหยุดอาร์กิวเมนต์บางส่วนของฟังก์ชันซึ่งส่งผลให้มีออบเจกต์ใหม่ที่มีลายเซ็นแบบง่าย
ฟังก์ชัน int() ในตัวจะแปลงตัวเลขเป็นจำนวนเต็มทศนิยม ลายเซ็นเริ่มต้นของ int() คือ
int(x, base = 10)
ฟังก์ชันบางส่วน () สามารถใช้เพื่อสร้าง callable ที่ทำงานเหมือนฟังก์ชัน int() โดยที่อาร์กิวเมนต์พื้นฐานมีค่าเริ่มต้นเป็นสอง
>>> import functools >>> binint = functools.partial(int, base = 2) >>> binint('1001') 9
ในตัวอย่างต่อไปนี้ ฟังก์ชันที่กำหนดโดยผู้ใช้ myfunction() ถูกใช้เป็นอาร์กิวเมนต์ของฟังก์ชันบางส่วนโดยการตั้งค่าเริ่มต้นบนหนึ่งในอาร์กิวเมนต์ของฟังก์ชันดั้งเดิม
>>> def myfunction(a,b): return a*b >>> partfunction = functools.partial(myfunction,b = 10) >>> partfunction(10) 100
วิธีการบางส่วน()
ฟังก์ชันนี้ส่งคืนตัวบอกวิธีการบางส่วนใหม่ซึ่งทำงานเหมือนบางส่วน ยกเว้นว่าได้รับการออกแบบเพื่อใช้เป็นคำจำกัดความของวิธีการแทนที่จะเรียกใช้ได้โดยตรง
ฟังก์ชัน Cmp_to_key()
Python 2.x มีฟังก์ชัน cmp() สำหรับการเปรียบเทียบสองอ็อบเจ็กต์ Python 3 เลิกใช้แล้ว โมดูล functools มีฟังก์ชัน cmp_to_key() ซึ่งเปรียบเทียบอ็อบเจ็กต์ของคลาสที่ผู้ใช้กำหนดได้
from functools import cmp_to_key class test: def __init__(self,x): self.x = x def __str__(self): return str(self.x) def cmpr( a,b): if a.x> = b.x: return True if a.x<b.x: return False mykey = cmp_to_key(cmpr)
ฟังก์ชันลด ()
ฟังก์ชัน reduce() ได้รับสองอาร์กิวเมนต์ คือ ฟังก์ชันและแบบวนซ้ำได้ อย่างไรก็ตาม จะคืนค่าเป็นค่าเดียว ฟังก์ชันอาร์กิวเมนต์ถูกนำไปใช้สะสมสองอาร์กิวเมนต์ในรายการจากซ้ายไปขวา ผลลัพธ์ของฟังก์ชันในการเรียกครั้งแรกกลายเป็นอาร์กิวเมนต์แรก และรายการที่สามในรายการกลายเป็นที่สอง ซ้ำจนกว่ารายการจะหมด
ในตัวอย่างด้านล่าง ฟังก์ชัน mult() ถูกกำหนดให้ส่งคืนผลิตภัณฑ์ของตัวเลขสองตัว ฟังก์ชันนี้ใช้ในฟังก์ชัน reduce() พร้อมกับช่วงของตัวเลขระหว่าง 1 ถึง 10 เอาต์พุตเป็นค่าแฟกทอเรียล 10
import functools def mult(x,y): return x*y num = functools.reduce(mult, range(1,11)) print ('factorial of 10: ',num)
ผลลัพธ์
factorial of 10: 3628800