getting into python functional programming any thoughts ?
from functools import reduce
1. CUSTOM DISCOUNT CALCULATOR (Scenario: Retail Discounts)
def make_discount_calculator(discount_rate):
def calculate_discount(price):
return price * discount_rate
return calculate_discount
2. CONVERT TO A PURE FUNCTION (Scenario: Applying Wholesale Markup)
def apply_markup(costs):
if not costs:
return []
return [costs[0] * 1.25] + apply_markup(costs[1:])
3. ID NUMBER GENERATOR (Scenario: Database ID Assignment)
def make_id_tracker(current_id):
def get_next_id():
return current_id, make_id_tracker(current_id + 1)
return get_next_id
4. REWRITE WITH YIELD (Scenario: Database ID Assignment Generator)
def make_id_tracker_2(current_id):
while True:
yield current_id
current_id += 1
5. GAME SCORES REPORT (Scenario: Multiplayer Match Results)
def process_scores(scores):
qualifying_scores = filter(lambda x: x >= 50, scores)
buffed_scores = map(lambda x: x + 10, qualifying_scores)
total_team_score = reduce(lambda x, y: x + y, buffed_scores, 0)
return total_team_score
6. INVENTORY TRACKER SIMULATION (Scenario: Warehouse Stock)
def make_inventory(stock_level):
def inventory(action, quantity):
if action == "restock":
return make_inventory(stock_level + quantity)
elif action == "sell":
return make_inventory(stock_level - quantity)
elif action == "audit":
return stock_level, make_inventory(stock_level)
else:
raise ValueError("Unknown action")
return inventory
7. EVENT PROCESSING WITHOUT LOOPS (Scenario: Applying Buffs to Player Stats)
def map_recursively(operation, elements):
if not elements:
return []
return [operation(elements[0])] + map_recursively(operation, elements[1:])
8. IMAGE PROCESSING PIPELINE (Scenario: Batch Image Resizing)
def compose_funcs(f, g):
return lambda x: f(g(x))
def make_image_processor():
downscale = lambda pixels: pixels * 0.5
apply_brightness = lambda pixels: pixels + 15
compress = lambda pixels: round(pixels, 0)
return compose_funcs(compress, compose_funcs(apply_brightness, downscale))
9. TEXT FORMATTING PIPELINE (Scenario: Chat Filter)
def strip_vowels(word):
if not word:
return ""
char = word[0]
rest = strip_vowels(word[1:])
if char.lower() in "aeiou":
return rest
return char + rest
def chain_processors(routines):
return lambda data: reduce(lambda current_val, routine: routine(current_val), routines, data)
10. FLATTENING DEPARTMENT DATA (Scenario: Corporate Org Chart)
def unnest_structure(hierarchy):
if not hierarchy:
return []
if isinstance(hierarchy[0], list):
return unnest_structure(hierarchy[0]) + unnest_structure(hierarchy[1:])
return [hierarchy[0]] + unnest_structure(hierarchy[1:])
def main():
print("--- 1. CUSTOM DISCOUNT CALCULATOR ---")
student_discount = make_discount_calculator(0.20)
print(f"20% discount on $200: ${student_discount(200)}")
print("\n--- 2. CONVERT TO A PURE FUNCTION ---") costs = [100, 200, 50] print(f"Original costs: {costs}") print(f"With markup: {apply_markup(costs)}") print("\n--- 3. ID NUMBER GENERATOR ---") tracker = make_id_tracker(1000) id1, tracker = tracker() id2, tracker = tracker() print(f"Generated IDs: {id1}, {id2}") print("\n--- 4. REWRITE WITH YIELD ---") tracker_gen = make_id_tracker_2(1000) print(f"Generated IDs (yield): {next(tracker_gen)}, {next(tracker_gen)}") print("\n--- 5. GAME SCORES REPORT ---") scores = [40, 80, 55, 30, 90] print(f"Processed Total Score: {process_scores(scores)}") print("\n--- 6. INVENTORY TRACKER SIMULATION ---") inv = make_inventory(500) inv = inv("restock", 200) inv = inv("sell", 50) current_stock, inv = inv("audit", 0) print(f"Current Inventory Stock: {current_stock}") print("\n--- 7. EVENT PROCESSING WITHOUT LOOPS ---") double_buff = lambda x: x * 2 stats = [10, 20, 30] print(f"Buffed Stats: {map_recursively(double_buff, stats)}") print("\n--- 8. IMAGE PROCESSING PIPELINE ---") pipeline = make_image_processor() print(f"Processed Pixel Value (from 100): {pipeline(100)}") print("\n--- 9. TEXT FORMATTING PIPELINE ---") strip_whitespace = lambda s: s.strip() lowercase = lambda s: s.lower() text_pipeline = chain_processors([strip_whitespace, lowercase, strip_vowels]) print(f"Processed Text: {text_pipeline(' HELLO World ')}") print("\n--- 10. FLATTENING DEPARTMENT DATA ---") org_chart = ["Executive", ["Engineering", ["Frontend", "Backend"]], "HR"] print(f"Flattened Org Chart: {unnest_structure(org_chart)}") if name == "main":
main()
原文:https://www.a8q9.cn/en/article/getting-into-python-functional-programming-any-thoughts-9168ce.html