ยินดีต้อนรับกลับไปสู่อีกชิ้นอาหารอันโอชะของการเขียนโปรแกรมเชิงฟังก์ชัน ก่อนหน้านี้ ฉันเขียนเกี่ยวกับการใช้ฟังก์ชัน แผนที่ ฟังก์ชัน map รับฟังก์ชันและฟังก์ชันที่สามารถทำซ้ำได้เป็นอาร์กิวเมนต์ และใช้ฟังก์ชันนี้กับสมาชิกทุกคนของฟังก์ชันที่ทำซ้ำได้ วันนี้เราจะทำงานกับเครื่องมือใหม่ที่จะเพิ่มลงในชุดเครื่องมือของเรา — ตัวกรอง เอาล่ะ! คุณเคยต้องการกรองบางรายการภายในรายการโดยพิจารณาว่าเป็นไปตามเกณฑ์ที่กำหนดหรือไม่? ตามชื่อที่แนะนำ ฟังก์ชันตัวกรองจะทำอย่างนั้นทุกประการ
กรอง
ลองนึกภาพอีกครั้งว่าเจ้านายของคุณมอบหมายงานให้คุณสร้างเว็บแอปคัดแยกอาหารที่กรอง (เข้าใจแล้ว ตัวกรอง…ไม่…ฉันจะดำเนินการต่อ…) กำจัดผลิตภัณฑ์นมและผลิตภัณฑ์จากเนื้อสัตว์ออกจาก รายชื่อบริษัทผลิตภัณฑ์อาหารต่างๆ คุณดึงแขนเสื้อขึ้นและเริ่มดูโค้ดเบสที่เจ้านายของคุณจัดเตรียมไว้ให้
# We manage our inventory within the inventory attribute class Company(object): def __init__(self, name,inventory): self.name = name self.inventory = inventory # Each product contains a type, category and a name class Product(object): def __init__(self,type,category,name): self.type = type self.category = category self.name = name milk = Product(“food”,”dairy”,”milk”) cheese = Product(“food”,”diary”,”cheese”) yogurt = Product(“food”,”diary”,”yogurt”) chicken = Product(“food”,”meat”,”chicken”) steak = Product(“food”,”meat”,”steak”) wings = Product(“food”,”meat”,”wings”) # We set up a list of products here that our company ships out list_of_products = [milk,cheese,yogurt,chicken,steak,wings] # We define our company here cool_foods = Company(“Cool Foods”, list_of_products)
การเคลื่อนไหวครั้งแรกของคุณอาจเป็นเพียงแค่สร้างฟังก์ชันที่รับผลิตภัณฑ์เป็นอาร์กิวเมนต์ คืนค่าจริงหรือเท็จ จากนั้นประเมินผลิตภัณฑ์ภายในลูปและจัดเก็บผลิตภัณฑ์ที่ตรงกับเกณฑ์ของคุณไปยังรายการอื่น ปัญหาคือคุณเขียนโค้ดมากเกินไปแล้ว มาทำสิ่งนี้ด้วยวิธี "ใช้งานได้" กัน
# First we make a "filtering" function. I call this the "BIG LIVER". It sounds good. def filter_out_diary_products(product): if product.category == “meat”: return True else: return False # The "BIG LIVER" has the job of filtering out any product that is not a meat product. filtered_products = filter(filter_out_diary_products, xyzco.inventory)
ฉันดีใจที่คุณถาม ไม่มีเวทย์มนตร์ที่นี่ มันเป็นเพียงเครื่องมือที่น่าทึ่ง ตัวกรองรับฟังก์ชันเป็นอาร์กิวเมนต์และนำไปใช้ เช่นเดียวกับฟังก์ชัน แผนที่ ที่ทำงานกับทุกค่าของการวนซ้ำ ยกเว้นคราวนี้ มันจะค้นหาเกณฑ์และเกณฑ์นั้นคือค่าที่ส่งผ่านไปยังฟังก์ชันใดฟังก์ชันหนึ่งออกมาเป็น จริง คุณต้องการประเมินค่าโดยพิจารณาว่าค่าเหล่านั้นออกมาเป็นเท็จหรือไม่ ไม่มีปัญหา คุณมี "filterfalse" อยู่ข้างคุณ ฉันหวังว่าคุณจะพบว่าโพสต์บล็อกของวันนี้ค่อนข้างน่าขบขัน ฉันรู้ว่าคุณยังคงงุนงงกับความสุดยอดของ Functional Programming แต่เดี๋ยวก่อน ยังมีเรื่องเซอร์ไพรส์อีกมากมายที่จะเกิดขึ้น