2014-04-29 4 views
6

तो मैं समझता हूँ कि अगर मैं निम्नलिखितट्रिपल उद्धरण

print """ Anything I 
      type in here 
      works. Multiple LINES woohoo!""" 

लेकिन क्या होगा अगर निम्न मेरी अजगर स्क्रिप्ट

""" This is my python Script. Just this much """ 

ऊपर बात क्या करता है है? क्या यह टिप्पणी के रूप में लिया जाता है? यह वाक्यविन्यास त्रुटि क्यों नहीं है?

इसी तरह,

"This is my Python Script. Just this. Even with single quotes." 

कैसे उपरोक्त दो लिपियों में व्याख्या कर रहे हैं अगर मैं क्या ज़रूरत है?

धन्यवाद

उत्तर

10

ट्रिपल कोट्स ''' या """ तार का प्रतिनिधित्व करने का सिर्फ विभिन्न तरीके हैं। ट्रिपल कोट्स का लाभ यह है कि यह कई लाइनों का विस्तार कर सकता है और कभी-कभी docstrings के रूप में कार्य करता है।

कारण:

"hadfasdfas"

किसी भी त्रुटि को उठाने नहीं करता है क्योंकि अजगर बस स्ट्रिंग बनाता है और फिर कुछ भी के लिए असाइन करें नहीं करता है। पाइथन दुभाषिया के लिए, यदि आपके पास कोई भी वाक्यविन्यास या अर्थशास्त्र त्रुटियां

आशा है कि आपकी मदद करता है, तब तक यह आपके कोड में एक व्यर्थ बयान है।

2

स्ट्रिंग का मूल्यांकन किया गया है, और इसे देखते हुए दुभाषिया को कुछ भी सौंपा गया नहीं था, इसे फेंकता है।

लेकिन कुछ विशेष स्थानों में, इस स्ट्रिंग वास्तव में आइटम के __doc__ प्रॉपर्टी को निर्दिष्ट किया जाता है:

def func(arg): 
    """ 
    Does stuff. This string will be evaluated and assigned to func.__doc__. 
    """ 
    pass 

class Test: 
    """ 
    Same for Test.__doc__ 
    """ 
    pass 

module.py के शीर्ष पर:

""" 
module does stuff. this will be assigned to module.__doc__ 
""" 
def func(): 
... 
+2

वास्तव में डॉकस्ट्रिंग में यह 'func .__ doc__' – wim

+0

से बंधेगा हाँ, मुझे याद आया। धन्यवाद – MadeOfAir

1

इसके अलावा @ sshashank124 जवाब मैं करने के लिए जोड़ना है कि ट्रिपल उद्धृत स्ट्रिंग का उपयोग https://docs.python.org/2/library/doctest.html

पर परीक्षण करने के लिए भी किया जाता है तो इस कोड स्निपेट पर विचार करें:

def some_function(x, y): 
"""This function should simply return sum of arguments. 
It should throw an error if you pass string as argument 

>>> some_function(5, 4) 
9 
>>> some_function(-5, 4) 
-1 
>>> some_function("abc", 4) 
Traceback (most recent call last): 
    ... 
ValueError: arguments must numbers 
""" 
if type(x, str) or type(y, str): 
    raise ValueError("arguments must numbers") 
else: 
    return x + y 

if __name__ == "__main__": 
    import doctest 
    doctest.testmod() 

यदि आप इस छोटे मॉड्यूल को आयात करते हैं, तो आपको some_function फ़ंक्शन मिलेगा।
लेकिन यदि आप इस स्क्रिप्ट को सीधे खोल से बुलाते हैं, तो ट्रिपल उद्धृत स्ट्रिंग में दिए गए परीक्षणों का मूल्यांकन किया जाएगा और रिपोर्ट आउटपुट पर मुद्रित की जाएगी।

तो ट्रिपल उद्धृत तारों को प्रकार स्ट्रिंग के मान के रूप में माना जा सकता है, टिप्पणी के रूप में, डॉकस्ट्रिंग के रूप में और unittests के लिए कंटेनर के रूप में।

+0

मुझे यह नहीं मिला, तो जब मैं इस स्क्रिप्ट को चलाता हूं तो वास्तव में क्या होता है। एक के लिए, मुझे यकीन नहीं है कि एक्स और वाई के लिए मूल्य क्या होगा? क्या आप विस्तृत कर सकते हैं। धन्यवाद – Kraken

+0

यदि आप इसे '.py'' जैसे 'some_module.py'' के साथ फ़ाइल के रूप में सहेजते हैं तो यह एक मॉड्यूल बन जाता है। यदि आप इसे आयात करते हैं तो '__name__ ==" __main __ "' 'गलत है 'इसलिए कोई जादू नहीं होता है। लेकिन अगर आप इसे खोल से आह्वान करते हैं i.e.'python some_module.py' पिछली दो पंक्तियां निष्पादित हो जाती हैं। इस मामले में 'doctest.testmod()' पायथन unittests के लिए docstring स्कैन करेगा। तो यह '>>>' मिलता है जिसका अर्थ है 'execute'। मेरे स्निपेट में पहले unittest कॉल 'some_function (5, 4) '। इस कॉल का अपेक्षित परिणाम अगली पंक्ति में रखा गया है। कभी-कभी तीसरे सबसे अजीब में अपवाद की अपेक्षा की जाती है। परिणाम अपेक्षित होने पर परीक्षण सफल होता है। – ElmoVanKielmo

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