खोज…


आंशिक

partial फ़ंक्शन किसी अन्य फ़ंक्शन से आंशिक फ़ंक्शन अनुप्रयोग बनाता है। इसका उपयोग फ़ंक्शन के कुछ तर्कों (या कीवर्ड तर्कों) के मानों को बाध्य करने के लिए किया जाता है और पहले से परिभाषित तर्कों के बिना एक कॉल करने योग्य उत्पादन करता है।

>>> from functools import partial
>>> unhex = partial(int, base=16)
>>> unhex.__doc__ = 'Convert base16 string to int'
>>> unhex('ca11ab1e')
3390155550

partial() , जैसा कि नाम से पता चलता है, एक फ़ंक्शन के आंशिक मूल्यांकन की अनुमति देता है। आइए निम्नलिखित उदाहरण देखें:

In [2]: from functools import partial

In [3]: def f(a, b, c, x):
   ...:     return 1000*a + 100*b + 10*c + x
   ...: 

In [4]: g = partial(f, 1, 1, 1)

In [5]: print g(2)
1112

जब g बनाया जाता है, f , जो चार तर्क ( a, b, c, x ) लेता a, b, c, x को पहले तीन तर्कों, a, b, c, लिए आंशिक रूप से मूल्यांकन किया जाता है। f का मूल्यांकन तब पूरा g है जब g को कहा जाता है, g(2) , जो f के चौथे तर्क को पारित करता है।

partial सोचने का एक तरीका शिफ्ट रजिस्टर है; किसी कार्य में समय पर एक तर्क में धक्का। उन मामलों के लिए partial काम आता है जहां डेटा स्ट्रीम के रूप में आ रहा है और हम एक से अधिक तर्क पारित नहीं कर सकते।

total_ordering

जब हम एक ऑर्डर करने योग्य वर्ग बनाना चाहते हैं, तो आमतौर पर हमें __eq()__ , __lt__() , __le__() , __gt__() और __ge__() को परिभाषित करने की आवश्यकता होती है।

total_ordering डेकोरेटर, एक वर्ग पर लागू होता है, __eq__() और __lt__() , __le__() , __gt__() और __ge__() बीच की परिभाषा की अनुमति देता है, और फिर भी कक्षा पर सभी आदेश संचालन की अनुमति देता है।

@total_ordering
class Employee:

    ...

    def __eq__(self, other):
        return ((self.surname, self.name) == (other.surname, other.name))

    def __lt__(self, other):
        return ((self.surname, self.name) < (other.surname, other.name))

डेकोरेटर अन्य तुलना विधियों को प्राप्त करने के लिए प्रदान किए गए तरीकों और बीजीय संचालन की एक संरचना का उपयोग करता है। उदाहरण के लिए यदि हमने __lt__() और __eq()__ परिभाषित किया है और हम __gt__() को प्राप्त करना चाहते हैं, तो हम केवल not __lt__() and not __eq()__

नोट : total_ordering फ़ंक्शन केवल पायथन 2.7 के बाद से उपलब्ध है।

कम करना

अजगर 3.x में, reduce समारोह पहले से ही समझाया यहाँ बनाया-इन से हटा दिया गया है और अब से आयात किया जाना चाहिए functools

from functools import reduce
def factorial(n):
    return reduce(lambda a, b: (a*b), range(1, n+1))

lru_cache

@lru_cache डेकोरेटर का उपयोग कम से कम हाल ही में उपयोग किए गए कैश के साथ एक महंगा, कम्प्यूटेशनल-गहन फ़ंक्शन को लपेटने के लिए किया जा सकता है। यह फ़ंक्शन कॉल को ज्ञापन करने की अनुमति देता है, ताकि भविष्य में समान मापदंडों के साथ कॉल पुन: प्रतिष्ठित होने के बजाय तुरंत वापस आ सकें।

@lru_cache(maxsize=None)  # Boundless cache
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

>>> fibonacci(15)

इसके बाद के संस्करण का मूल्य, उदाहरण में fibonacci(3) केवल तभी जबकि, एक बार गणना की जाती है fibonacci एक LRU कैश नहीं था, fibonacci(3) 230 बार से अधिक होगी गणना की गई है। इसलिए, @lru_cache विशेष रूप से पुनरावर्ती कार्यों या गतिशील प्रोग्रामिंग के लिए बहुत अच्छा है, जहां एक ही फ़ंक्शन को एक ही सटीक मापदंडों के साथ कई बार कहा जा सकता है।

@lru_cache के दो तर्क हैं

  • maxsize : बचाने के लिए कॉल की संख्या। जब अद्वितीय कॉल की संख्या maxsize हो जाती है, तो LRU कैश हाल ही में उपयोग किए गए कॉल को हटा देगा।
  • typed (3.3 में जोड़ा गया): यह निर्धारित करने के लिए ध्वज यदि विभिन्न प्रकार के समतुल्य तर्क अलग कैश रिकॉर्ड के हैं (अर्थात यदि 3.0 और 3 अलग-अलग तर्क के रूप में गिने जाते हैं)

हम कैश आँकड़े भी देख सकते हैं:

>>> fib.cache_info()
CacheInfo(hits=13, misses=16, maxsize=None, currsize=16)

नोट : चूँकि @lru_cache कैश परिणामों के लिए शब्दकोशों का उपयोग करता है, फ़ंक्शन के सभी मापदंडों को कैश के काम करने के लिए उपलब्ध होना चाहिए।

@lru_cache लिए आधिकारिक पायथन डॉक्स@lru_cache 3.2 में जोड़ा गया था।

cmp_to_key

अजगर ने बदल दिया कि यह एक महत्वपूर्ण कार्य को स्वीकार करने के लिए छँटाई के तरीके हैं। वे फ़ंक्शन एक मान लेते हैं और एक कुंजी लौटाते हैं जिसका उपयोग सरणियों को क्रमबद्ध करने के लिए किया जाता है।

पुराने तुलना फ़ंक्शंस का उपयोग दो मान लेने के लिए किया जाता है और -1, 0 या +1 लौटाता है, यदि पहला तर्क क्रमशः दूसरे तर्क से छोटा, बराबर या अधिक है। यह नए की-फंक्शन के लिए असंगत है।

यही वह जगह है जहाँ functools.cmp_to_key आता है:

>>> import functools
>>> import locale
>>> sorted(["A", "S", "F", "D"], key=functools.cmp_to_key(locale.strcoll))
['A', 'D', 'F', 'S']

उदाहरण पायथन स्टैंडर्ड लाइब्रेरी डॉक्यूमेंटेशन से लिया और लिया गया है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow