2008-12-18 21 views
8

यहाँ TurboGears 1.0.6 के भीतर से कोड का एक टुकड़ा है:पायथन में [] -स्क्यू सजावट वाक्यविन्यास का क्या अर्थ है?

[dispatch.generic(MultiorderGenericFunction)] 
def run_with_transaction(func, *args, **kw): 
    pass 

मैं समझ नहीं कैसे से पहले एक समारोह परिभाषा एक सूची डाल संभवतः इसे प्रभावित कर सकते हैं।

dispatch.generic के docstring में, यह उल्लेख है:

ध्यान दें कि जब बड़े अजगर संस्करणों का उपयोग कर, आप '[dispatch.generic()]' '@ dispatch.generic()' के स्थान पर उपयोग करना चाहिए।

ठीक है, तो यह स्पष्ट रूप से पाइथन के पूर्व-सजावटी संस्करणों में सजावटी-जैसे व्यवहार प्राप्त करने का एक तरीका है, लेकिन यह संभवतः बिल्ली कैसे काम कर सकता है?

उत्तर

11

सजावटी वाक्यविन्यास PyProtocols द्वारा प्रदान किया जाता है।

"" अंत में, यह ध्यान रखना महत्वपूर्ण है कि ये "जादू" सजावटी एक बहुत ही चुस्त हैक का उपयोग करते हैं: वे sys.settrace() डीबगर हुक का दुरुपयोग करते हैं ताकि यह पता चल सके कि असाइनमेंट हो रहे हैं या नहीं। Guido बहुत मंद दृश्य लेता है इनमें से, लेकिन हुक की मौजूदा कार्यक्षमता 2.2, 2.3, या 2.4 में बदलने वाली नहीं है, इसलिए इसके बारे में चिंता न करें। सजावट करने वालों के लिए "प्रारंभिक पहुंच" पाने के लिए यह वास्तव में एक चाल है, और 2.4 जीवन चक्र हमारे कोड को 2.4 सिंटैक्स पर स्विच करने के लिए काफी लंबा होगा। पाइथन 2.5 या 2.6 के आसपास कहीं भी, add_assignment_advisor() जादू भाग छोड़ सकता है और इसे इस्तेमाल करने वाले सजावटी के लिए पिछड़ा संगतता रैपर बन सकता है। " http://dirtsimple.org/2004/11/using-24-decorators-with-22-and-23.html

तो यह कुछ जादू में वास्तविक सजावट को लपेटकर इन कामों की तरह लगता है जो वास्तव में फ़ंक्शन के लिए असाइन किए जाने वाले कार्यों में हेरफेर करने के लिए डिबगर्स के लिए विशेष कोड में शामिल होता है।

अजगर डॉक्स इस बारे में settrace

"" " नोट settrace() फ़ंक्शन केवल डिबगर, प्रोफाइलर, कवरेज उपकरण और तरह लागू करने के लिए करना है का कहना है। इसका व्यवहार कार्यान्वयन मंच का हिस्सा है, भाषा परिभाषा के भाग के बजाय, और इस प्रकार सभी पायथन कार्यान्वयन में उपलब्ध नहीं हो सकता है। ""

-2

कुछ भी रहस्यमय नहीं, यह सिंटैक्स पहले ही था।

पार्सर बदल गया है, संभवतः क्योंकि पाइथन जेन का दावा है कि "अस्पष्टता के सामने, अनुमान लगाने के लिए प्रलोभन से इनकार करें।"

[] केवल सूची के लिए होना चाहिए, और वहां है।

+0

मैं कोड देख रहा हूं कि मेरा पायथन 2.5 पार्सर पार्सिंग कर रहा है। जब मैं पाइथन में एक सजावटी घोषित करने के लिए वाक्यविन्यास की इस शैली का उपयोग करने का प्रयास करता हूं, तो यह सिर्फ एक आइटम के साथ एक सूची वस्तु बनाता है। पायथन का कौन सा संस्करण इस वाक्यविन्यास का उपयोग करता है? मैं दस्तावेज़ीकरण कहां देख सकता हूं? –

+2

-1, यह पुराने पायथन संस्करणों के लिए बाहरी कार्यान्वयन है, लेकिन यह नहीं है कि वाक्यविन्यास कैसा था। – orip

संबंधित मुद्दे