కలెక్షన్స్ మాడ్యూల్ & అడ్వాన్స్‌డ్ డేటా స్ట్రక్చర్స్

🌐 Modern Python 3.12+ 📖 Chapter 15 of 25 📁 Phase 03: డేటా స్ట్రక్చర్స్ & కలెక్షన్స్ 🗓️ 2026 Edition
📌 Covered in this chapter: collections.Counter ఫ్రీక్వెన్సీ ఎనాలసిస్ · defaultdict · deque (Double-ended Queue O(1)) · OrderedDict · heapq మాడ్యూల్ (Priority Queues) · Standard Collections Limits · collections.Counter & Multiset Arithmetic · collections.defaultdict & Grouping · collections.deque O(1) Double-Ended Queues · Circular Buffers · OrderedDict & ChainMap · heapq Priority Queues (Min-Heap / Max-Heap) · High-Frequency Trading Engine Project
పైథాన్‌లోని ప్రాథమిక డేటా స్ట్రక్చర్స్ అయిన Lists, Tuples, Dictionaries, మరియు Sets దాదాపు 90% సాధారణ అవసరాలను తీరుస్తాయి. కానీ మీరు రియల్-టైమ్ స్టాక్ మార్కెట్ ట్రేడింగ్ సిస్టమ్స్, హాస్పిటల్ ఐసీయూ ఎమర్జెన్సీ ట్రయేజ్, నెట్‌వర్క్ ప్యాకెట్ బఫర్లు, లేదా కోట్లాది సోషల్ మీడియా పోస్టులలో ట్రెండింగ్ పదాలను విశ్లేషించే బిగ్ డేటా ఇంజిన్లను నిర్మిస్తున్నప్పుడు — సాధారణ లిస్ట్‌లు మరియు డిక్షనరీలు పెర్ఫార్మెన్స్ సమస్యలను ఎదుర్కొంటాయి.

ఉదాహరణకు, ఒక సాధారణ లిస్ట్ ప్రారంభంలో కొత్త ఎలిమెంట్‌ను ఇన్సర్ట్ చేయడానికి లేదా మొదటి ఎలిమెంట్‌ను తొలగించడానికి (pop(0)) మిగతా అన్ని ఎలిమెంట్లను పక్కకు జరపాలి (O(N) లీనియర్ టైమ్). కానీ collections.deque వాడితే ఇరువైపులా ఇన్సర్షన్స్ మరియు డిలీషన్స్ రెప్పపాటులో (O(1) కాన్స్టెంట్ టైమ్) పూర్తవుతాయి! అలాగే మిస్సింగ్ కీల భయం లేకుండా డేటాను గ్రూప్ చేసే defaultdict, అత్యంత ప్రజాదరణ పొందిన అంశాలను తక్షణమే లెక్కించే Counter, మరియు అత్యవసర టాస్క్‌లను వెంటనే ఎగ్జిక్యూట్ చేసే heapq (Priority Queue) — ఈ అడ్వాన్స్‌డ్ ఆయుధాలన్నీ పైథాన్ స్పెషల్ కలెక్షన్స్ మాడ్యూల్‌లో దాగి ఉన్నాయి. Phase 03 ముగింపు అధ్యాయమైన ఇందులో, ఈ ప్రొఫెషనల్ డేటా స్ట్రక్చర్ల అంతర్గత నిర్మాణం మరియు రియల్-వరల్డ్ హై-ఫ్రీక్వెన్సీ ట్రేడింగ్ ఇంజిన్ ప్రాజెక్ట్‌ను లోతుగా అన్వేషిద్దాం!

1 స్టాండర్డ్ డేటా స్ట్రక్చర్స్ సరిపోవా? (Why Collections Module?)

పైథాన్ అంతర్నిర్మిత ప్రాథమిక డేటా రకాలు అద్భుతమైనవే అయినప్పటికీ, పెద్ద స్థాయి ఎంటర్‌ప్రైజ్ అప్లికేషన్లలో కొన్ని నిర్దిష్టమైన పరిమితులను కలిగి ఉంటాయి:

ఈ లోపాలను అధిగమించడానికి పైథాన్ స్టాండర్డ్ లైబ్రరీ collections మరియు heapq మాడ్యూల్స్‌ను ప్రత్యేకంగా అందించింది.

2 collections.Counter — ఫ్రీక్వెన్సీ ఎనాలసిస్ సూపర్ పవర్

Counter అనేది డిక్షనరీ యొక్క సబ్‌క్లాస్. ఇది ఒక ఇటరబుల్ (లిస్ట్, స్ట్రింగ్, టుపుల్) లోని అంశాలు ఎన్నిసార్లు పునరావృతమయ్యాయో (Frequency) స్వయంచాలకంగా లెక్కించి భద్రపరుస్తుంది.

Counter యొక్క అగ్రశ్రేణి ఫీచర్లు:

3 కోడ్ డెమో 1: టెక్స్ట్ మైనింగ్ & వర్డ్ ఫ్రీక్వెన్సీ విశ్లేషణ

సోషల్ మీడియా హ్యాష్‌ట్యాగ్‌లు లేదా కస్టమర్ రివ్యూల నుండి అత్యంత ట్రెండింగ్ కీలక పదాలను Counter ద్వారా ఎలా విశ్లేషించవచ్చో క్రింది కోడ్‌లో చూడండి:

01_counter_frequency_analysis.py
# collections.Counter డెమో
from collections import Counter

# సోషల్ మీడియా కామెంట్ల నుండి సేకరించిన పదాలు
review_words = [
    "python", "fast", "clean", "python", "ai", "ml", "python",
    "awesome", "data", "ai", "fast", "python", "future", "ai"
]

word_counts = Counter(review_words)

print("=== 1. ఫ్రీక్వెన్సీ సమ్మరీ ===")
for word, count in word_counts.items():
    print(f"పదం : {word:<12} పునరావృతం : {count} సార్లు")

# టాప్ 2 ట్రెండింగ్ పదాలు
print("\n=== 2. మోస్ట్ కామన్ ఎలిమెంట్స్ (Top 2) ===")
top_2 = word_counts.most_common(2)
for rank, (word, freq) in enumerate(top_2, start=1):
    print(f"ర్యాంక్ {rank}: '{word}' ({freq} సార్లు వచ్చింది)")

# లేని కీని చదవడం (నో KeyError!)
print(f"\n'blockchain' కౌంట్ : {word_counts['blockchain']} (స్వయంచాలకంగా 0!)")

4 collections.defaultdict — జీరో KeyError ఆర్కిటెక్చర్

defaultdict అనేది డిక్షనరీలోని కీలు లేనప్పుడు వచ్చే KeyError ను శాశ్వతంగా నిర్మూలించే ఒక అద్భుతమైన సాధనం. డిక్షనరీని సృష్టించేటప్పుడే దానికి ఒక ఫ్యాక్టరీ ఫంక్షన్ (Default Factory) ను అందిస్తాము.

5 మల్టీ-లెవల్ డేటా గ్రూపింగ్ విత్ defaultdict(list)

సాధారణ డిక్షనరీలో ఐదు లైన్ల కోడ్ పట్టే గ్రూపింగ్ పనిని defaultdict కేవలం ఒకే ఒక్క లైన్‌లో ఎలా సులభతరం చేస్తుందో చూడండి:

# విద్యార్థుల విభాగాల వారీగా గ్రూపింగ్
from collections import defaultdict

students_by_branch = defaultdict(list)
students_by_branch["CSE"].append("సురేష్") # KeyError రాదు! CSE లేకపోతే [] మొదలవుతుంది
students_by_branch["CSE"].append("అంజలి")
students_by_branch["ECE"].append("రాజేష్")

6 collections.deque — డబుల్ ఎండెడ్ క్యూ (O(1) vs O(N))

deque (ఉచ్ఛారణ: "డెక్" - Double-Ended Queue) అనేది CPython లో డబ్లీ లింక్డ్ లిస్ట్ (Doubly Linked List of Blocks) రూపంలో నిర్మించబడిన హై-స్పీడ్ డేటా స్ట్రక్చర్.

లిస్ట్ వర్సెస్ డెక్ పెర్ఫార్మెన్స్ పోలిక:

ఆపరేషన్ సాధారణ Python లిస్ట్ collections.deque లాభం & విశ్లేషణ
చివర చేర్చడం (append) O(1) సగటు O(1) స్థిరమైన సమయం రెండూ సమాన వేగవంతం
మొదట చేర్చడం (appendleft) O(N) చాలా నెమ్మది! O(1) సూపర్ ఫాస్ట్! ⚡ డెక్ 1000 రెట్లు వేగవంతం
మొదటిది తీసివేయడం (popleft) O(N) (pop(0)) O(1) సూపర్ ఫాస్ట్! ⚡ Queue ప్రాసెసింగ్‌కు డెక్ అనువైనది
మధ్యలోని ఇండెక్స్ లుకప్ (d[500]) O(1) రాండమ్ యాక్సెస్ O(N) లింక్డ్ ట్రావర్సల్ రాండమ్ రీడింగ్‌కు లిస్ట్ మేలు

సర్క్యులర్ బఫర్ (Circular Buffer with maxlen): డెక్‌ను సృష్టించేటప్పుడు d = deque(maxlen=5) అని గరిష్ట పరిమాణాన్ని నిర్దేశించవచ్చు. బఫర్ నిండిపోయిన తర్వాత కొత్త ఎలిమెంట్ రాగానే, అత్యంత పాత ఎలిమెంట్ స్వయంచాలకంగా బయటకు వెళ్లిపోతుంది! ఇది లైవ్ లాగింగ్ మరియు స్ట్రీమింగ్ మూవీంగ్ యావరేజ్‌లకు వరప్రసాదం.

7 కోడ్ డెమో 2: స్లైడింగ్ విండో మూవింగ్ యావరేజ్ with deque(maxlen=K)

సెన్సార్ డేటా లేదా స్టాక్ ప్రైస్ టిక్కర్ల నుండి స్థిరమైన గత 4 టిక్స్ యొక్క మూవింగ్ యావరేజ్‌ను deque(maxlen=K) ద్వారా ఎలా లెక్కిస్తామో చూడండి:

02_deque_sliding_window_buffer.py
# collections.deque సర్క్యులర్ బఫర్ డెమో
from collections import deque

# కేవలం గత 4 రీడింగులను మాత్రమే భద్రపరిచే స్లైడింగ్ విండో బఫర్
recent_prices = deque(maxlen=4)

incoming_stream = [100.5, 102.0, 101.5, 103.0, 104.5, 103.5, 106.0]

print("=== స్లైడింగ్ విండో మూవింగ్ యావరేజ్ (Window Size = 4) ===")
for tick in incoming_stream:
    recent_prices.append(tick)
    current_avg = sum(recent_prices) / len(recent_prices)
    print(f"కొత్త ధర : ₹{tick:<6.2f} -> ప్రస్తుత బఫర్ : {list(recent_prices)} -> సగటు : ₹{current_avg:.2f}")

8 collections.OrderedDict & LRU Cache బేసిక్స్

పైథాన్ 3.7 నుండి సాధారణ డిక్షనరీలు కూడా ఇన్సర్ట్ చేసిన వరుస క్రమాన్ని గుర్తుపెట్టుకుంటున్నాయి. అయినప్పటికీ OrderedDict లో సాధారణ డిక్షనరీలో లేని రెండు శక్తివంతమైన మెథడ్స్ ఉన్నాయి:

9 collections.ChainMap — కాన్ఫిగరేషన్ లేయరింగ్

ChainMap అనేది బహుళ డిక్షనరీలను ఒకే సింగిల్ లాజికల్ వ్యూగా గ్రూప్ చేస్తుంది. మెమరీలో డేటాను నకలు చేయకుండా (కాపీ చేయకుండా) చెయిన్ చేస్తుంది.

అప్లికేషన్ కాన్ఫిగరేషన్ ప్రాధాన్యతలలో ఇది విస్తృతంగా వాడబడుతుంది: కమాండ్ లైన్ ఆర్గ్యుమెంట్స్ > ఎన్విరాన్‌మెంట్ వేరియబుల్స్ > డిఫాల్ట్ కాన్ఫిగ్ ఫైల్.

from collections import ChainMap

defaults = {"theme": "light", "port": 8080, "debug": False}
user_env = {"port": 9000} # యూజర్ ఓవర్‌రైడ్
cli_args = {"debug": True} # అత్యున్నత ప్రాధాన్యత

app_config = ChainMap(cli_args, user_env, defaults)
print(app_config["port"]) # 9000 (user_env నుండి తీసుకుంటుంది)
print(app_config["theme"]) # light (defaults నుండి తీసుకుంటుంది)

10 heapq మాడ్యూల్ — బైనరీ హీప్ & ప్రయారిటీ క్యూస్

heapq మాడ్యూల్ పైథాన్‌లో మిన్-హీప్ (Min-Heap) అల్గారిథమ్‌ను సాధారణ లిస్ట్‌లపై అమలు చేస్తుంది. ఇందులో మొదటి ఎలిమెంట్ heap[0] ఎల్లప్పుడూ ఆ కలెక్షన్‌లోని అత్యల్ప (Smallest) అంశంగా ఉంటుంది.

ప్రధాన ఆపరేషన్లు & టైమ్ కాంప్లెక్సిటీ:

11 కోడ్ డెమో 3: హాస్పిటల్ ఎమర్జెన్సీ ట్రయేజ్ & టాస్క్ షెడ్యూలర్

రోగుల ఆరోగ్య తీవ్రత ఆధారంగా (Priority 1 = అత్యవసరం) తదుపరి చికిత్స పొందాల్సిన రోగిని heapq ప్రయారిటీ క్యూ ద్వారా ఎలా ప్రాసెస్ చేస్తారో చూద్దాం:

03_hospital_emergency_priority_queue.py
# heapq ప్రయారిటీ క్యూ డెమో
import heapq

# ఆసుపత్రి ఎమర్జెన్సీ వార్డ్ క్యూ (Min-Heap)
# Tuple structure: (Priority, Patient Name, Condition)
# Priority: 1 = క్రిటికల్, 2 = తీవ్రమైన, 3 = సాధారణ
triage_queue = []

# కొత్త రోగులను చేర్చడం (heappush)
heapq.heappush(triage_queue, (3, "రాము", "సాధారణ జ్వరం"))
heapq.heappush(triage_queue, (1, "రమేష్", "గుండెపోటు లక్షణాలు"))
heapq.heappush(triage_queue, (2, "కవిత", "ఎముక విరిగింది"))
heapq.heappush(triage_queue, (1, "సునీత", "తీవ్రమైన శ్వాసకోశ సమస్య"))

print("=== 🏥 ICU ఎమర్జెన్సీ ట్రయేజ్ ట్రీట్‌మెంట్ ఆర్డర్ ===")
while triage_queue:
    priority, name, condition = heapq.heappop(triage_queue)
    badge = "🚨 అత్యవసరం (ICU)" if priority == 1 else ("⚠️ తీవ్రమైనది" if priority == 2 else "🟢 సాధారణం")
    print(f"ప్రాధాన్యత {priority} [{badge}]: రోగి: {name:<10} సమస్య: {condition}")

12 కామన్ బిగినర్స్ మిస్టేక్స్ & ప్రొడక్షన్ బెస్ట్ ప్రాక్టీసెస్

13 రియల్-వరల్డ్ ప్రాజెక్ట్: "High-Frequency Trading & Order Execution Engine"

ఈ పదిహేనవ అధ్యాయంలో నేర్చుకున్న అన్ని అడ్వాన్స్‌డ్ స్ట్రక్చర్లను (Counter ఫ్రీక్వెన్సీ, defaultdict గ్రూపింగ్, deque స్లైడింగ్ బఫర్, heapq ప్రయారిటీ ఆర్డర్ బుక్) మిళితం చేస్తూ — సెకనుకు వేల ఆర్డర్లను ప్రాసెస్ చేసే పూర్తి స్థాయి Real-time High-Frequency Trading & Order Execution Engine ను నిర్మిద్దాం!

04_high_frequency_trading_engine.py
# =====================================================================
# చాప్టర్ 15 మినీ ప్రాజెక్ట్: High-Frequency Trading & Order Execution Engine
# కాన్సెప్ట్స్: collections.defaultdict, deque (Sliding Window Tick Buffer),
#             collections.Counter (Volume Analytics), heapq (Priority Order Book)
# =====================================================================
from collections import defaultdict, deque, Counter
import heapq
import time

class TradingEngine:
    def __init__(self):
        # 1. ప్రయారిటీ బై ఆర్డర్ బుక్ (Min-Heap with Negated Price for Max-Price Buy Priority)
        # Structure: (-buy_price, order_id, shares, trader)
        self.buy_order_book = []

        # 2. గత 5 మార్కెట్ టిక్స్ స్లైడింగ్ బఫర్ (deque circular buffer)
        self.market_price_stream = deque(maxlen=5)

        # 3. ట్రేడర్ల వారీగా పోర్ట్‌ఫోలియో షేర్ల బ్యాలెన్స్ (defaultdict(int))
        self.trader_portfolios = defaultdict(int)

        # 4. స్టాక్ సింబల్స్ ట్రేడింగ్ వాల్యూమ్ విశ్లేషణ (Counter)
        self.volume_counter = Counter()

    def add_market_tick(self, stock_symbol: str, price: float):
        """లైవ్ మార్కెట్ ప్రైస్ టిక్‌ను స్లైడింగ్ విండోలోకి స్వీకరిస్తుంది."""
        self.market_price_stream.append(price)
        current_moving_avg = sum(self.market_price_stream) / len(self.market_price_stream)
        print(f"📈 [TICK] {stock_symbol:<6} ధర: ₹{price:<7.2f} (గత 5 టిక్స్ సగటు: ₹{current_moving_avg:.2f})")

    def place_buy_order(self, order_id: str, stock: str, price: float, shares: int, trader: str):
        """కొనుగోలు ఆర్డర్‌ను హీప్ ప్రయారిటీ క్యూలో నమోదు చేస్తుంది."""
        # అత్యధిక ధరకు కొనేవారికి మొదటి ప్రాధాన్యత ఇవ్వడానికి నెగటివ్ ప్రైస్ వాడతాం!
        heapq.heappush(self.buy_order_book, (-price, order_id, stock, shares, trader))
        print(f"📥 [ORDER] {trader} -> Buy {shares} {stock} @ ₹{price}")

    def execute_top_orders(self):
        """ఆర్డర్ బుక్ నుండి అత్యున్నత బిడ్ ప్రైస్ ఉన్న ఆర్డర్లను O(log N) వేగంతో ఎగ్జిక్యూట్ చేస్తుంది."""
        print("\n" + "=" * 74)
        print(f"{'⚡ మన ట్రేడింగ్ ఎక్స్ఛేంజ్ — ఆర్డర్ ఎగ్జిక్యూషన్ రిపోర్ట్ 2026':^74}")
        print("=" * 74)
        print(f"{'ఆర్డర్ ID':<10} {'స్టాక్':<8} {'ఎగ్జిక్యూట్ ధర':>14} {'షేర్లు':>8} {'ట్రేడర్':<14} {'విలువ (₹)':>14}")
        print("-" * 74)

        while self.buy_order_book:
            neg_price, order_id, stock, shares, trader = heapq.heappop(self.buy_order_book)
            exec_price = -neg_price
            trade_value = exec_price * shares

            # పోర్ట్‌ఫోలియో & వాల్యూమ్ అప్‌డేట్
            self.trader_portfolios[trader] += shares
            self.volume_counter[stock] += shares

            print(f"{order_id:<10} {stock:<8} ₹{exec_price:>12.2f} {shares:>8} {trader:<14} ₹{trade_value:>12,.2f}")

        print("=" * 74)

    def print_analytics_summary(self):
        """Counter & defaultdict ద్వారా పోర్ట్‌ఫోలియో & వాల్యూమ్ సమ్మరీని ఇస్తుంది."""
        print("\n📊 అత్యధిక వాల్యూమ్ ట్రేడ్ అయిన స్టాక్స్ (Top Traded Symbols):")
        for stock, total_shares in self.volume_counter.most_common():
            print(f"  • {stock:<8} : మొత్తం {total_shares:,} షేర్లు ట్రేడ్ అయ్యాయి")

        print("\n💼 ట్రేడర్ల తాజా షేర్ల పోర్ట్‌ఫోలియో (defaultdict balance):")
        for trader, total_shares in self.trader_portfolios.items():
            print(f"  • {trader:<14} : {total_shares} షేర్లు కలిగి ఉన్నారు")
        print("=" * 74 + "\n")

# ఇంజిన్ టెస్టింగ్
engine = TradingEngine()

print("--- 1. లైవ్ మార్కెట్ ప్రైస్ టిక్స్ స్ట్రీమింగ్ (deque) ---")
engine.add_market_tick("TCS", 3850.0)
engine.add_market_tick("TCS", 3865.0)
engine.add_market_tick("TCS", 3840.0)
engine.add_market_tick("TCS", 3875.0)
engine.add_market_tick("TCS", 3890.0)
engine.add_market_tick("TCS", 3910.0)

print("\n--- 2. ఆర్డర్స్ నమోదు (heapq priority) ---")
engine.place_buy_order("ORD-101", "TCS", 3870.0, 50, "రాహుల్")
engine.place_buy_order("ORD-102", "INFY", 1520.0, 100, "అంజలి")
engine.place_buy_order("ORD-103", "TCS", 3905.0, 30, "సురేష్") # అత్యధిక బిడ్!
engine.place_buy_order("ORD-104", "INFY", 1550.0, 200, "రాహుల్")

engine.execute_top_orders()
engine.print_analytics_summary()

★ ఈ అధ్యాయంపై ప్రాక్టీస్ క్విజ్ (Knowledge Check)

1. list.pop(0) కంటే deque.popleft() ఎందుకు 1000 రెట్లు వేగవంతమైనది?
సమాధానం: సాధారణ లిస్ట్‌లో మొదటి ఎలిమెంట్‌ను తీసివేస్తే మిగిలిన అన్ని ఎలిమెంట్లను మెమరీలో ఒక స్థానం ముందుకు జరపాలి (O(N) లీనియర్ టైమ్). కానీ deque అంతర్గతంగా డబ్లీ లింక్డ్ లిస్ట్‌గా నిర్మించబడింది. కాబట్టి మొదటి నోడ్ యొక్క పాయింటర్‌ను మార్చడం ద్వారా O(1) కాన్స్టెంట్ సమయంలో తక్షణమే ఎలిమెంట్‌ను తొలగిస్తుంది.
2. collections.Counter లో లేని కీని చదివితే KeyError ఎందుకు రాదు?
సమాధానం: Counter అనేది డిక్షనరీ యొక్క సబ్‌క్లాస్ అయినప్పటికీ, అది __missing__(key) మెథడ్‌ను ఓవర్‌రైట్ చేస్తుంది. ఆ కీ కౌంటర్‌లో లేకపోతే ఎర్రర్ విసరడానికి బదులుగా 0 రిటర్న్ చేస్తుంది.
3. defaultdict(list) లో ఫ్యాక్టరీ ఫంక్షన్ పాత్ర ఏమిటి?
సమాధానం: డిక్షనరీలో ఇంకా ఉనికిలో లేని నూతన కీని యాక్సెస్ చేసినప్పుడు, defaultdict ఆ ఫ్యాక్టరీ ఫంక్షన్‌ను (ఇక్కడ list) కాల్ చేసి స్వయంచాలకంగా ఒక ఖాళీ లిస్ట్‌ను [] ప్రారంభ విలువగా కేటాయిస్తుంది. దీనివల్ల KeyError రాదు మరియు ముందస్తు చెకింగ్స్ అవసరం ఉండదు.
4. heapq మాడ్యూల్ డిఫాల్ట్‌గా Min-Heap ని అమలు చేస్తుందా లేదా Max-Heap ని అమలు చేస్తుందా?
సమాధానం: పైథాన్ యొక్క heapq డిఫాల్ట్‌గా Min-Heap ని అమలు చేస్తుంది. అంటే heap[0] ఎల్లప్పుడూ అత్యల్ప విలువను కలిగి ఉంటుంది. ఒకవేళ Max-Heap కావాలంటే సంఖ్యలను నెగటివ్‌గా మార్చి (-val) స్టోర్ చేయాలి.
5. deque(maxlen=K) లో సర్క్యులర్ బఫర్ ఎలా పనిచేస్తుంది?
సమాధానం: maxlen నిర్దేశించినప్పుడు డెక్ గరిష్టంగా K ఎలిమెంట్లను మాత్రమే నిల్వ చేస్తుంది. బఫర్ పూర్తిగా నిండిన తర్వాత కొత్త ఎలిమెంట్‌ను యాడ్ చేసినప్పుడు, ఎదురువైపున ఉన్న అత్యంత పాత ఎలిమెంట్ స్వయంచాలకంగా బయటకు వెళ్లిపోతుంది. దీనివల్ల మెమరీ లీక్స్ లేకుండా స్థిరమైన సైజులో స్లైడింగ్ విండోస్ నిర్వహించవచ్చు.
← మునుపటి అధ్యాయం: 14. సెట్స్ & ఆపరేషన్స్ తర్వాతి అధ్యాయం: 16. ఫంక్షన్స్ ఫండమెంటల్స్ →

ఈ High-Frequency Trading Engine ని లైవ్‌గా మన కంపైలర్‌లో రన్ చేయండి!

ఎటువంటి లోకల్ సెటప్ లేకుండా, బ్రౌజర్‌లోనే Modern Python 3 కంపైలర్‌లో ఈ కోడ్‌ను ఎగ్జిక్యూట్ చేసి అవుట్‌పుట్ తనిఖీ చేయండి.