Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Functools — ฟังก์ชันและการดำเนินการที่มีลำดับสูงกว่าบนวัตถุที่เรียกใช้ได้ใน Python


ฟังก์ชันใน 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