Why Python remembers things after a function is done (code screenshot below) db_connector has finished execution. Its stack frame is gone. Yet connect still remembers host and port. That preserved state is a closure — created automatically when an inner function captures outer scope. You don’t “use closures” explicitly. You design around them. Why this matters: • avoids globals • keeps config scoped • cleaner APIs • safer state Closures aren’t a trick. They’re how Python naturally models state + behavior. Once you notice this, patterns such as DB clients, API wrappers, and rate limiters become obvious. #Python #SoftwareEngineering #BackendDevelopment
Python Closures Preserve State After Function Execution
More Relevant Posts
-
Python Tip: With Statement The 'with Statement' Is More Than Syntax Most developers see 'with' as a shortcut for opening files. It’s not. It’s Python’s way of guaranteeing clean resource management, automatically and safely. No forgotten .close() No hidden leaks No fragile cleanup logic That’s the real shift from old to modern Python: Old mindset -> “Remember to clean up.” Modern mindset -> “Design so cleanup is automatic.” 'with' isn’t just cleaner code. It’s safer architecture. FOLLOW FOR MORE PYHON TIPS & INSIGHTS #Python #CleanCode #SoftwareEngineering #ProgrammingTips
To view or add a comment, sign in
-
-
Day 54 of 365 Days of code 1) Capacity to Ship Packages Within D Days Approach: Binary search 1)set low = max(weights) 2) high= low*sum(weights) 3) perform the below steps until low<=high condition fails i) mid=low+(high-low)//2;res=0 ii) set w = mid and initialize day=1 iii) iterate through the loop and perform the stuff i put in screenshot (ahh life hurts :") ) iv) if the day <= days: set res=mid ; set high=mid-1 v) else low=mid+1 4) return res #365daysOfCode #NeetCode #leetcode #DSA #python #LeetCode #ProblemSolving #Algorithms #365dayschallenge
To view or add a comment, sign in
-
-
A tiny Python trick I learned while using Claude Code While building an app with Claude Code, I noticed it repeatedly using a neat Python pattern I had somehow missed for years. d = {'A': 1, 'B': 2} e = {**d, 'A': 2} print(e) # {'A': 2, 'B': 2} This looks trivial. But the idea behind it is powerful: start from a default dictionary and selectively override fields. It’s a small trick, but it creates a very clean pattern for: ✅ Generating test cases ✅ Configuration overrides ✅ Scenario simulation Sometimes the most useful ideas are not big algorithms. They are small patterns that quietly make code cleaner. #pythonic #claudecode #claude #software #pythontricks #python
To view or add a comment, sign in
-
How async/await turns 30 seconds into 3 seconds (without changing the server)? TL;DR: By letting the program handle multiple requests while waiting using async and await! What does AWAIT do? When code hits await, it tells Python: "This will take time, go do something else meanwhile." Python's event loop then switches to another task, keeping the CPU busy instead of idle. What's Actually Happening? -> async def marks a function as asynchronous -> await marks points where the program can pause and switch tasks Note that this works for I/O bound tasks only, CPU bound tasks need multiprocessing. Takeaway: -> async/await is perfect for I/O bound concurrent operations -> 10x performance improvements are common -> The learning curve is worth it for any I/O-heavy application I'm diving deep into Python concurrency. Follow along and share your bottleneck stories in comments! #Python #Concurrency #SoftwareEngineering #BackendDevelopment #Performance
To view or add a comment, sign in
-
-
Your Python script isn’t slow. It’s just doing too much… the hard way. 🐍 Over the years, a few small automation habits saved me hours: • Use 𝐥𝐢𝐬𝐭/𝐝𝐢𝐜𝐭 𝐜𝐨𝐦𝐩𝐫𝐞𝐡𝐞𝐧𝐬𝐢𝐨𝐧𝐬 instead of nested loops where possible ⚡ • 𝐏𝐮𝐬𝐡 𝐡𝐞𝐚𝐯𝐲 𝐟𝐢𝐥𝐭𝐞𝐫𝐢𝐧𝐠 𝐭𝐨 𝐒𝐐𝐋 instead of cleaning everything in Python 🗄️ • 𝐂𝐚𝐜𝐡𝐞 𝐞𝐱𝐩𝐞𝐧𝐬𝐢𝐯𝐞 𝐀𝐏𝐈 𝐫𝐞𝐬𝐩𝐨𝐧𝐬𝐞𝐬 (even a simple in‑memory dict helps) 💾 • Log less, but 𝐥𝐨𝐠 𝐬𝐦𝐚𝐫𝐭𝐞𝐫 — timestamps + key IDs > dumping full payloads 📝 • Measure with 𝐭𝐢𝐦𝐞.𝐩𝐞𝐫𝐟_𝐜𝐨𝐮𝐧𝐭𝐞𝐫() before “optimizing” ⏱️ Most automation code grows quietly. Until one day it’s a 12‑minute job that used to take 90 seconds. Friday question: What’s one tiny refactor that made your script noticeably faster? 👇 #python #automation #productivity #backend #devlife
To view or add a comment, sign in
-
-
Python Tip — Tuples: Small Feature, Big Signal Most developers see tuples as “lists you can’t modify.” That’s surface-level thinking. Tuples are about immutability and intent. When you use a tuple, you’re telling other developers: “This data should not change.” They’re: - Faster than lists - Hashable (usable as dictionary keys) - Safer for fixed data - Perfect for returning multiple values Use lists for collections that evolve. Use tuples for data that represents a fixed structure. In Python, the right data structure isn’t just technical, it communicates design. FOLOW FOR MORE PYTHON TIPS & INSIGHTS #Python #DataStructures #CleanCode #SoftwareEngineering #ProgrammingTips
To view or add a comment, sign in
-
-
The output of the execution of this program is : 4 This happens because, in Python, list comprehensions (and closures in general) create functions that close over the same variable i. When funcs[1](2) is called the value of i is determined at the time of execution, not the time of definition. By the time the function is called, the loop for i has completed, and i has the final value of 2. Therefore, funcs[1](2) evaluates to 2 * 2, which is 4 this occurs because of late binding in Python closures ,The functions created in the list look up the value of i at runtime, not at definition time. The loop completes before any function is called, leaving the final value of i as 2 When you execute funcs[1](2), it looks up i, finds it is 2, and calculates 2 * 2 So while calling funcs[0](2), funcs[1](2), or funcs[2](2) would all yield 4 #Python #AIEngineering #Instant #LearningJourney #CodingChallenge
To view or add a comment, sign in
-
-
Today I went deeper into Python file handling and it turned out to be more interesting than I expected. What seems simple at first (open(), read(), write()) actually hides subtle behavior: • "w" and "w+" clear the file the moment it’s opened • "r+" allows modification without automatically deleting content • The file pointer silently moves after read/write operations making seek(0) essential • truncate() prevents unexpected leftover data when rewriting shorter content It’s easy to use these functions. It’s harder and more valuable to understand how they behave internally. Worked through practical problems to move from just using file handling to actually understanding it. #Python #learningpython #filehandling
To view or add a comment, sign in
-
-
😵 Thread-local storage works great... until you move to async. Then the weird stuff starts. Request IDs bleeding between coroutines. Background tasks sharing state. “Random” bugs that disappear under logging. Sound familiar? Async doesn’t care about threads. It cares about execution context. In my latest article I explain: 🔍 Why threading.local() fails under asyncio 🧠 How ContextVars isolate state per coroutine ⚙️ Real examples with async tasks and request-scoped data 👉 https://lnkd.in/d_aVTDtW #python #softwaredevelopment #backend #engineering #asyncio
To view or add a comment, sign in
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development