2012-06-09 23 views
19

क्या पाइथन सजावट के अंदरूनी हिस्सों के लिए कोई "स्वीकृत" नामकरण सम्मेलन है?सजावटी में पाइथन नामकरण सम्मेलन

style guide इसका उल्लेख नहीं करता है, और this awesome entry about decorators लौटाए गए अंतिम कार्य के लिए "लपेटा" के रूपों का उपयोग करने में काफी संगत है, लेकिन तर्क लेने वाले सजावटी बनाने के दौरान उपयोग किए जाने वाले नामों के बारे में क्या?

def decorator_name(whatevs): 
    def inner(function): 
     def wrapped(*args, **kwargs): 
      # sweet decorator goodness 
     return wrapped 
    return inner 

विशेष रूप से, ऊपर के उदाहरण में के लिए inner, function, और wrapped सम्मेलनों क्या हैं?

उत्तर

17

उन नामों के लिए कोई मानकीकृत सम्मेलन (जैसे पीईपी) नहीं हैं। यदि आप पाइथन stdlib की जांच करते हैं तो आपको उन कार्यों के लिए कई अलग-अलग नाम मिलेंगे।

हालांकि, decorator सजावटी समारोह inner के लिए एक आम नाम है।
अपने wrapped फ़ंक्शन wrapper पर कॉल करना और functools.wraps(f) के साथ f के साथ इसे लपेटना भी आम है (func इसके लिए एक आम नाम भी है)।

def decorator_name(whatevs): 
    def decorator(f): 
     @wraps(f) 
     def wrapper(*args, **kwargs): 
      pass # sweet decorator goodness 
     return wrapper 
    return decorator 
+5

func f से अधिक पठनीय हो सकता है। – jfs

+3

एह, यदि आपके पास 'सजावट' नामक एकल-तर्क फ़ंक्शन है तो यह स्पष्ट है कि इसका तर्क क्या है जिसे कोई भी कहा जाता है। – Ben

+0

आंतरिक फ़ंक्शन 'सजावट' को कॉल करना शायद एक बहुत अच्छा विचार है, क्योंकि 'decorator_name' वास्तव में एक सजावट नहीं है लेकिन एक * सजावटी कारखाना * है, और नेस्टेड फ़ंक्शन परिभाषा की कई परतें थोड़ा उलझन में हो सकती हैं। – Ben

0

परिभाषा के अनुसार, पायथन में एक डेकोरेटर एक समारोह या एक वर्ग है, तो कार्यान्वयन के प्रकार (वर्ग या समारोह) हो सकता है, कारक है जो नामकरण सम्मेलन उपयोग करने के लिए निर्णय लेने से है। कीवर्ड सजावट के साथ फ़ंक्शन के नाम को उपसर्ग करना एक आम गलती है। सजावट के बारे में अधिक जानकारी के लिए link

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