2010-03-05 16 views
40

कई अजगर आईडीई के आप की तरह एक टेम्पलेट के साथ शुरू होगा: पर्याप्त नहीं है यही कारण है किसबसे अच्छा पायथन पुस्तकालय मॉड्यूल कंकाल कोड क्या है?

print 'hello world' 

... तो यहाँ इस सवाल का आरंभ करने के लिए मेरी कंकाल कोड है:

मेरी मॉड्यूल कंकाल, लघु संस्करण:

#!/usr/bin/env python 

""" 
Module Docstring 
""" 

# 
## Code goes here. 
# 

def test(): 
    """Testing Docstring""" 
    pass 

if __name__=='__main__': 
    test() 

और,

मेरी मॉड्यूल कंकाल, लांग संस्करण:

0,123,
#!/usr/bin/env python 
# -*- coding: ascii -*- 

""" 
Module Docstring 
Docstrings: http://www.python.org/dev/peps/pep-0257/ 
""" 

__author__ = 'Joe Author ([email protected])' 
__copyright__ = 'Copyright (c) 2009-2010 Joe Author' 
__license__ = 'New-style BSD' 
__vcs_id__ = '$Id$' 
__version__ = '1.2.3' #Versioning: http://www.python.org/dev/peps/pep-0386/ 

# 
## Code goes here. 
# 

def test(): 
    """ Testing Docstring""" 
    pass 

if __name__=='__main__': 
    test() 

नोट्स (PEP 8, UTF-8):

""" 
===MODULE TYPE=== 
Since the vast majority of my modules are "library" types, I have constructed 
this example skeleton as such. For modules that act as the main entry for 
running the full application, you would make changes such as running a main() 
function instead of the test() function in __main__. 

===VERSIONING=== 
The following practice, specified in PEP 8, no longer makes sense: 

    __version__ = '$Revision: 1.2.3 $' 

For two reasons: 
    (1) Distributed version control systems make it neccessary to include more 
     than just a revision number. E.g. author name and revision number. 
    (2) It's a revision number not a version number. 


Instead, the __vcs_id__ variable is being adopted. This expands to, for 
example: 
    __vcs_id__ = '$Id: example.py,v 1.1.1.1 2001/07/21 22:14:04 goodger Exp $' 


===VCS DATE=== 
Likewise, the date variable has been removed: 

    __date__ = '$Date: 2009/01/02 20:19:18 $' 


===CHARACTER ENCODING=== 
If the coding is explicitly specified, then it should be set to the default 
setting of ASCII. This can be modified if necessary (rarely in practice). 
Defaulting to UTF-8 can cause anomalies with editors that have poor unicode 
support. 

""" 

वैकल्पिक कंकाल, लांग संस्करण: (। कोड DasIch के जवाब से अनुकूलित)

#!/usr/bin/env python 
# -*- coding: ascii -*- 

""" 
package.module 
~~~~~~~~~~~~~ 

A description which can be long and explain the complete 
functionality of this module even with indented code examples. 
Class/Function however should not be documented here. 

:copyright: year by my name, see AUTHORS for more details 
:license: license_name, see LICENSE for more details 
""" 

# 
## Code goes here. 
# 

def test(): 
    """ """ 
    pass 

if __name__=='__main__': 
    test() 

Peps का एक बहुत हैं जो आगे कोडिंग शैली सिफारिशों डाल दिया। क्या मुझे कोई महत्वपूर्ण सर्वोत्तम प्रथाएं याद आ रही हैं? सबसे अच्छा पायथन मॉड्यूल कंकाल कोड क्या है?

अद्यतन

मुझे किसी भी प्रकार का "सर्वश्रेष्ठ" दिखाएं जो आप पसंद करते हैं। हमें बताएं कि आपने "सर्वश्रेष्ठ" अर्हता प्राप्त करने के लिए किस मीट्रिक का उपयोग किया था।

+4

"सर्वश्रेष्ठ" थोड़ा अस्पष्ट लगता है, शायद आप अपने प्रश्न को स्पष्ट कर सकते हैं। – Francesco

+0

मैं सर्वश्रेष्ठ बेसलाइन कंकाल कोड के लिए सर्वसम्मति चाहता हूं। अन्यथा, मैं सिर्फ यह जानने के लिए बसूंगा कि हर कोई क्या उपयोग करता है। – user213060

+0

@ उपयोगकर्ता213060: "सर्वोत्तम आधारभूत के लिए"। "सर्वश्रेष्ठ" का क्या अर्थ है? कम से कम? सबसे तेजी से? सबसे सरल? ज्यादातर विशेषताएं? विशालतम? अधिकांश दस्तावेज़ीकरण? Django के साथ निकटतम फिट? WSGI? "सर्वश्रेष्ठ" का क्या अर्थ है? कृपया अपने प्रश्न को सर्वोत्तम परिभाषा के साथ अद्यतन करें।कृपया अपने प्रश्न के लिए टिप्पणियां न जोड़ें। –

उत्तर

18
#!/usr/bin/env python 
# coding: utf-8 
""" 
    package.module 
    ~~~~~~~~~~~~~ 

    A description which can be long and explain the complete 
    functionality of this module even with indented code examples. 
    Class/Function however should not be documented here. 

    :copyright: year by my name, see AUTHORS for more details 
    :license: license_name, see LICENSE for more details 
""" 

मॉड्यूल या एक main समारोह शामिल नहीं हो सकता हो सकता है इतना है कि टेम्पलेट का हिस्सा नहीं है।

+1

सबसे अद्वितीय योगदान जिसमें उपयोगी विचार थे। इस तरह के अधिक अनूठे उत्तरों की तलाश में था। बहुत बढ़िया। – user213060

+0

मुझे लगता है कि एन्कोडिंग लाइन को छोड़ना वास्तव में बेहतर है, जिसकी आपको वास्तव में आवश्यकता है। इस तरह आप बिना किसी ध्यान के स्ट्रिंग अक्षर में गैर-असीसी वर्णों को चिपकाने से बचते हैं (भले ही आप कुछ पायनॉन फाइलों में वर्ड चिपकाने से स्ट्रिंग चिपकते हैं तो कुछ और गलत है) – ThiefMaster

1

कार्यक्रम की प्रकृति के आधार पर, आप लाइसेंस चुनने और फ़ाइल की शुरुआत में इसे डालने पर विचार कर सकते हैं।

12

यह अक्सर दूसरी पंक्ति में

#coding=<coding> 

स्थापित करने के लिए सलाह दी जाती है।

#coding=utf8 

उदाहरण के लिए। वर्बोज़

# -*- coding: <encoding name> -*- 

अधिक जानकारी के लिए PEP-263 देखें।


पूर्ण उत्तर के लिए संपादित करें: स्थिति पर निर्भर करता है। अगर यह कुछ आंतरिक परियोजनाओं के लिए आसान है, तो बेहतर है। लेकिन मैं लगभग हमेशा अगर मैं कोड प्रकाशित करना चाहते हैं

def main(): 
    #code 
    pass 

if __name__=="__main__": 
    main() 

है, मैं उचित प्रलेखन और लाइसेंसिंग शर्तें रूप में अच्छी तरह के रूप में उल्लेख एन्कोडिंग निर्देश जोड़ें।

शेबैंग (#!/usr/bin/env python) केवल उस फ़ाइल के लिए आवश्यक है जो निष्पादन योग्य है।

+1

यह एक डैश के साथ utf-8 है, आईआईआरसी (मुझे +1 :-)) – Francesco

+2

@ फ्रांसेस्को: ऐसा लगता है कि utf8 एक वैध उपनाम है: http://docs.python.org/library/codecs.html - पायथन फेंकता है एक त्रुटि अगर आप एक अवैध एन्कोडिंग –

+0

@Otto सेट करते हैं: धन्यवाद, मैं इसे भूल गया। – Francesco

4

कुछ है एक सबसे अच्छा अभ्यास भी (बुलाया आर्ग के साथ यहाँ) रिटर्निंग:

... 
import sys 

def main(args): 
    return 0 

if __name__=='__main__': 
    sys.exit(main(sys.argv)) 

लेकिन यह एक सरल "हैलो दुनिया" से कहीं अधिक जटिल होता जा रहा है।

http://github.com/ctb/SomePackage

+0

यह एक दिलचस्प परिप्रेक्ष्य है। – user213060

9

और भी बेहतर, यहां डॉ टाइटस ब्राउन ने सुझाव दिया पैकेज लेआउट है कार्यक्रम के बाद (फ़ाइल नाम के बाद):

def main(arg1, arg2, *args): 
    ... 

(आश्चर्यचकित हम टिप्पणियों में मार्कडाउन का उपयोग नहीं कर सकते ...)

+0

हाँ, मॉड्यूल के बाद, पूरे पैकेज हैं। पैकेज के लिए अच्छा प्रारंभिक संदर्भ। – user213060

0

कैसे के बारे में:

... 
import sys 

def main(*args): 
    return 0 

if __name__=='__main__': 
    sys.exit(main(*sys.argv[1:])) 

तो निश्चित रूप से आपको लगता है कि कंकाल मुख्य वास्तविक मापदंडों को प्रतिबिंबित करने के संशोधित

+0

लोगों को अभी भी sys.argv का उपयोग करने के लिए, क्या आपने http://code.google.com/p/pyopt/ के बारे में सुना है? – user213060

+1

उदाहरण के लिए केवल आगे निर्भरता जोड़ने के लिए हमेशा समझदारी नहीं है (जो मुख्य कार्यों का आमतौर पर उचित मॉड्यूल में उपयोग किया जाएगा)। –

+1

> (आश्चर्यचकित हम टिप्पणियों में मार्कडाउन का उपयोग नहीं कर सकते ...) * कुछ * मार्कडाउन टिप्पणियों में काम करता है, लेकिन मेरी पुस्तक में पर्याप्त नहीं है। –

2

मैं कहूंगा कि आपकी आवश्यकताओं को पूरा करने से सबसे आसान सबसे आसान है। जितना अधिक डेटा आप 'कंकाल' में डालते हैं, उतना पुराना या अर्थहीन या गलत डेटा जो आप वहां प्राप्त कर सकते हैं।

  • if __name__=='__main__': भाग मॉड्यूल में आवश्यक नहीं है जो केवल एक मॉड्यूल है। टेस्ट मॉड्यूल का हिस्सा हो सकता है, लेकिन फिर भी उन्हें बाहरी रूप से बुलाया जा सकता है। मॉड्यूल को सीधे कॉल करना अक्सर असुविधाजनक होता है (या असंभव, उदाहरण के लिए जब सापेक्ष आयात का उपयोग किया जाता है)।
  • पाइथन दुभाषिया आमतौर पर कहता है कि कोडिंग जानकारी की आवश्यकता होती है, न कि प्रत्येक टुकड़े कोड को गैर-असीसी वर्णों की आवश्यकता होती है।

उचित न्यूनतम आईएमएचओ मॉड्यूल की शुरुआत में डॉकस्ट्रिंग है। आपके प्रश्न और अन्य उत्तरों में उल्लिखित अन्य टुकड़े भी अक्सर उपयोगी होते हैं, लेकिन किसी भी तरह से अनिवार्य नहीं होते हैं।

+0

मैं मानता हूं कि utf-8 को डिफॉल्ट करना एक खराब विकल्प है। मैं परीक्षण के लिए असहमत हूं। मुझे लगता है कि परीक्षण के समावेशन की आवश्यकता है, या कम से कम इसके लिए एक स्टब है, ठीक पहले मॉड्यूल में पहले संस्करणों के लिए। फिर, मॉड्यूल परिपक्व होने के कारण परीक्षण को बाहरी मॉड्यूल में ले जाया जा सकता है। कुल मिलाकर, इनपुट की सराहना करते हैं। – user213060

+0

"सरलतम जो आवश्यकताओं को पूरा करता है" के लिए, मैं क्रिंग करता हूं जब विंडोज उपयोगकर्ता शुरुआत में '#!/Usr/bin/env python' को छोड़ देते हैं। यह डिफ़ॉल्ट रूप से बैश दुभाषिया द्वारा चलाए जा रहे स्क्रिप्ट का कारण बन सकता है। बहुत खराब या अजीब चीजें तब हो सकती हैं ... – user213060

+0

'#!/Usr/bin/python' (मुझे विभिन्न कारणों से/bin/env संस्करण पसंद नहीं है, लेकिन यह ऑफ-विषय है) पायथन स्क्रिप्ट के लिए आवश्यक है (निष्पादन योग्य) मॉड्यूल नहीं। हर मॉड्यूल को निष्पादन योग्य नहीं होना चाहिए। –

4

मॉड्यूल निष्पादन योग्य नहीं हैं, इसलिए उनके पास शेबांग नहीं होना चाहिए।

डॉकस्ट्रिंग अच्छे हैं।

कोडिंग उपयोगी है।

पैकेजिंग मेटाडेटा के हिस्से के रूप में setup.py में सबसे अच्छी तरह से संग्रहीत लेखक, कॉपीराइट, संस्करण और लाइसेंस जैसे मेटाडाटा। __(metadata)__ मॉड्यूल गुणों का उपयोग पुराना अभ्यास है, क्योंकि यह उस समय की भविष्यवाणी करता है जब पाइथन पैकेजिंग मेटाडेटा था। यदि कोड एक क्षणिक पर्याप्त प्रकृति का है जो पैकेजिंग की गारंटी नहीं देता है, तो यह असंभव है कि आपको मेटाडेटा की आवश्यकता होगी।

अतिरिक्त विशेषताएं जैसे परीक्षण() या __main__ हैक मैं मॉड्यूल टेम्पलेट में वारंट समावेशन के लिए लगभग पर्याप्त उपयोग नहीं करता हूं।

तो केवल जरूरत टेम्पलेट है:

# -*- coding: ascii -*- 
""" 
""" 

अच्छा और सरल।

+1

एक मॉड्यूल कंकाल टेम्पलेट के बारे में सोचें जो सामान्य रूप से टाइप किए गए कोड की पुनरावृत्ति को खत्म कर सकता है। यदि आप पिछले 100 मॉड्यूल को लिखना चाहते थे, तो मुझे यकीन है कि आप पाएंगे कि इस कंकाल में इस कंकाल कम हो गया है। – user213060

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