51 पॉइंट द्वारा GN⁺ 2025-04-24 | 5 टिप्पणियां | WhatsApp पर शेयर करें
  • Python में आम तौर पर कम ज्ञात 14 उन्नत सुविधियों को वास्तविक उदाहरणों के साथ प्रस्तुत किया गया है
  • typing, generics, protocols, context managers आदि के माध्यम से static typing और structural design पर गहन व्याख्या दी गई है
  • Python 3.10+ में जोड़े गए structural pattern matching और slots, metaclasses जैसी performance optimization तकनीकें भी शामिल हैं
  • f-string, cache, future, proxy, for-else, walrus आदि जैसे साफ-सुथरा कोड लिखने के टिप्स भी संकलित हैं
  • हर सुविधा के लिए अतिरिक्त सीखने के लिंक और संदर्भ सामग्री दी गई है, इसलिए junior developers भी इसे आसानी से समझ सकते हैं

Python की 14 उन्नत सुविधाओं का सार

# typing overload

  • @overload decorator एक ही function के लिए कई type signatures परिभाषित करने देता है
  • type checker दिए गए arguments के आधार पर return type का सटीक अनुमान लगा सकता है
  • Literal का उपयोग कर string values को सीमित भी किया जा सकता है
  • id या username में से सिर्फ एक को आवश्यक मानने वाला function signature भी बनाया जा सकता है
  • type safety के लिए हल्के Enum विकल्प के रूप में Literal का उपयोग किया जा सकता है

# keyword-only / positional-only arguments

  • * का उपयोग करने पर इसे keyword-only argument बनाया जा सकता है (positional argument के रूप में उपयोग नहीं)
  • / का उपयोग करने पर इसे positional-only argument बनाया जा सकता है (keyword argument के रूप में उपयोग नहीं)
  • API design में arguments के उपयोग के तरीके को स्पष्ट रूप से लागू किया जा सकता है

# future annotations (__future__)

  • type hints सामान्यतः runtime पर तुरंत evaluate होते हैं, इसलिए declaration order से जुड़ी समस्या हो सकती है
  • from __future__ import annotations से evaluation को बाद के लिए टाला जा सकता है
  • लेकिन यह string processing तरीके पर आधारित है, इसलिए runtime में type उपयोग करते समय सावधानी चाहिए
  • PEP 649 में __annotations__ attribute के लिए deferred evaluation पद्धति का सुधार प्रस्तावित है

# generic syntax

  • Python 3.12 से नई generic type definition syntax समर्थित है
  • TypeVar की जगह class Foo[T, U: int] जैसे रूप में इसे अधिक सहज तरीके से लिखा जा सकता है
  • variadic generics भी जोड़े गए हैं, जिससे विभिन्न प्रकारों को संभाला जा सकता है
  • type alias परिभाषा भी सरल हो गई है, जैसे type Vector = list[float]

# protocols

  • Duck Typing के type-checking संस्करण के रूप में structural subtyping लागू की जा सकती है
  • यदि किसी class में कुछ विशेष methods हैं, तो type inheritance के बिना भी type compatibility संभव है
  • @runtime_checkable के साथ इसे isinstance जाँच तक विस्तारित किया जा सकता है

# context manager

  • __enter__, __exit__ methods वाले object को with block में उपयोग किया जाता है
  • contextlib.contextmanager decorator से सरल function-आधारित implementation संभव है
  • yield के पहले और बाद में setup और cleanup कार्य किए जा सकते हैं

# structural pattern matching

  • match-case syntax के जरिए जटिल data structures को सहज रूप से branch किया जा सकता है
  • tuple/list destructuring, OR pattern, guard condition (if), wildcard आदि का उपयोग संभव है
  • data की संरचना के आधार पर branch होने से readability और maintainability बेहतर होती है

# slots optimization

  • __dict__ की जगह fixed slots का उपयोग कर memory और speed optimization की जा सकती है
  • __slots__ में केवल attribute names वाली tuple का उपयोग होता है
  • class में अनावश्यक attributes जुड़ने से रोका जा सकता है
  • हालांकि यह micro-optimization स्तर की चीज़ है, इसलिए उपयोग सोच-समझकर करना चाहिए

# Python code style tips

  • for-else statement: यदि loop break के बिना समाप्त हो जाए, तो else चलता है
  • walrus operator (:=): variable assignment और condition check एक साथ संभव
  • or short-circuit evaluation: कई values में से पहली truthy value लौटाता है
  • comparison operator chaining: 0 < x < 10 जैसे रूप में कोड संक्षिप्त किया जा सकता है

# f-string advanced formatting

  • f"{변수=}" syntax से debugging के लिए expression display किया जा सकता है
  • number formats (:.2f, :+.2f, :,), date formats (%Y-%m-%d) आदि कई विकल्प उपलब्ध हैं
  • center alignment, padding, percentage display जैसी format mini-language का उपयोग किया जा सकता है

# cache decorator

  • @lru_cache और @cache से function results को store करके performance बढ़ाई जा सकती है
  • recursive functions या बार-बार होने वाली calculations में यह उपयोगी है
  • @cache Python 3.9 से जोड़ा गया, और यह default unlimited cache देता है

# Python Future

  • JS के Promise जैसा asynchronous object handling फीचर
  • Future.set_result(), add_done_callback() आदि से result को asynchronously manage किया जा सकता है
  • asyncio.Future() को await के साथ उपयोग किया जा सकता है
  • ThreadPoolExecutor के साथ उपयोग करने पर background parallel processing भी संभव है

# proxy property

  • किसी class attribute को property की तरह भी और function की तरह भी काम करने देता है
  • __get__, __call__, __repr__ के जरिए दोनों तरह की कार्यक्षमता दी जा सकती है
  • API design में default value और parameterized call को एक ही तरीके से संभालना संभव होता है
  • व्यावहारिक उपयोग से अधिक, यह एक प्रयोगात्मक उदाहरण के रूप में देखने योग्य है

# metaclass

  • class को बनाने वाली class की class
  • class attributes में बदलाव या automatic registration जैसी meta logic लिखी जा सकती है
  • व्यवहार में अधिकतर मामलों में इसे decorator से बदला जा सकता है
  • Django, SQLAlchemy, Pydantic आदि में अंदरूनी रूप से metaclass का उपयोग होता है

5 टिप्पणियां

 
hackerpropoker 2025-04-29

बैकएंड के नज़रिए से, metaclasses ने debugging को मुश्किल बनाने का अनुभव दिया है।

 
ilotoki0804 2025-04-28

ध्यान रखें कि for-else को अक्सर anti-pattern माना जाता है, क्योंकि इसे readability या clarity के लिहाज़ से बहुत अच्छा नहीं समझा जाता, और asyncio.Future को asyncio के internal implementation detail के रूप में देखा जाता है।

 
dkmin 2025-04-26

धन्यवाद। खासकर 10वां मैं अभी तुरंत लागू कर रहा हूँ.

AI coding rules भी जोड़ दिए..

 
yangeok 2025-04-25

बेहतरीन टिप के लिए धन्यवाद

 
GN⁺ 2025-04-24
Hacker News राय
  • नमस्ते! मैं इस ब्लॉग का मूल लेखक हूँ! सुबह 4 बजे यह देखकर चौंक गया कि मेरा लेख HN के पहले पेज पर पहुँच गया

    • यह लेख ब्लॉग शुरू करने से एक महीने पहले लिखे गए 14 छोटे tweets से शुरू हुआ था
    • ब्लॉग शुरू करते समय मैंने तय किया कि इन tweets को पहली पोस्ट के रूप में फिर से इस्तेमाल करूँगा
    • इसलिए इसका flow थोड़ा अजीब लग सकता है
    • सोमवार को उपयोगी चीजें, और शुक्रवार को थोड़ी ज़्यादा अनोखी चीजें ढूँढने की कोशिश की
    • शीर्षक भी उसी तरह रखा, Python इस्तेमाल करते हुए मुझे दिलचस्प लगे 14 features का यह संग्रह है
    • शीर्षक सोचने में मैंने लगभग 5 सेकंड ही लगाए
  • हर बार Python इस्तेमाल करते हुए चिंता होती है कि कहीं मेरा code ऐसा तो नहीं लग रहा जैसे Python का गलत इस्तेमाल किया गया हो

    • Python के बारे में जिन गहरी बातों या बदलावों का पता नहीं था, उन्हें देखकर हैरानी होती है
    • Go यह भरोसा देता है कि कुछ साल बाद भी code पुराना या पिछड़ा हुआ नहीं लगेगा
    • शानदार लेख है
  • Python को Python ही रहना चाहिए, और golang, Rust, Typescript को अपनी-अपनी philosophy और design के साथ रहना चाहिए

    • 28 साल से 4 भाषाओं में coding कर रहा हूँ, और Python में हुए बदलाव मुझे पसंद नहीं हैं
    • Python की लोकप्रियता का कारण type checking या annotations जैसी अतिरिक्त layers नहीं थीं
    • दूसरी भाषाओं में भी ऐसा ही देखा है
    • हाल में introduced features की यह एक व्यापक सूची है
    • एक पुरानी सूची भी है जो पाठकों को उपयोगी लग सकती है
  • Python की सबसे बड़ी ताकत यह है कि यह executable pseudocode जैसा महसूस होता है

    • भाषा domain-level instructions के बीच बाधा नहीं बनती
    • जितने ज़्यादा features जोड़े जाते हैं, इसकी आकर्षकता उतनी कम हो जाती है
    • ज़्यादातर लोग Python को गहराई से नहीं समझते
  • 9.3 वाले paragraph evaluation पर एक टिप्पणी: अगर empty string हो तो evaluation अलग होती है

    • if-else clause empty string को valid मानता है, लेकिन or operator उसे None के बराबर मानता है
  • Javascript/Typescript से Python में आए व्यक्ति के रूप में यह एक उपयोगी resource है

    • typing overload Javascript की एक दुर्भाग्यपूर्ण सुविधा के लिए है, और मैं इसे technical debt मानता हूँ
    • keyword-only और positional-only arguments में syntax इतना संक्षिप्त है कि readability को लेकर चिंता होती है
    • future annotations हाल में बहुत मददगार रही हैं
    • protocols Typescript जैसे हैं, लेकिन Python जैसे नहीं लगते
    • metaclasses ऐसे खास problems हल करने वाला एक शक्तिशाली tool हैं
  • ज़्यादातर features वास्तव में advanced features नहीं हैं

    • metaclasses जटिल behavior पैदा कर सकती हैं, इसलिए मैं उनसे बचता हूँ
    • 'proxy property' कोई feature नहीं है
  • इस सूची में मैं जो बदलना चाहूँगा वह collections.abc containers को शामिल करना है

    • कई comments में walrus operator को नापसंद किया गया, लेकिन अच्छा use case मिलने के बाद मैं इसे उपयोगी ढंग से इस्तेमाल करने लगा
    • regular expression patterns के साथ काम करते समय code काफी साफ हो जाता है
  • यह लेख पढ़ना आनंददायक था

    • ज़्यादातर features typing module की सुविधाएँ हैं
    • generics या protocols को लेकर मैं आश्वस्त नहीं था
    • जिज्ञासा है कि क्या आधुनिक production-level Python code हर जगह types का इस्तेमाल करता है