2014-04-29 8 views
6

Yani anlıyorum ben şuÜçlü tırnak

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

Ama ne benim python komut dosyası

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

Yukarıdaki şey ne yapar aşağıdakileri ise yaparsanız? Yorum olarak alındı ​​mı? Neden bir sözdizimi hatası değil?

Benzer şekilde, bunu yaparsam

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

Nasıl yukarıdaki iki komut yorumlanır?

Teşekkür

cevap

10

üçlü tırnak ''' veya """ dizeleri temsil sadece farklı yolları vardır. Üçlü alıntıların avantajı, birden çok satıra yayılabilmesi ve bazen docstrings olarak hizmet vermesidir.

nedeni: piton basitçe dizesini oluşturur ve daha sonra herhangi bir şey atamak olmadığından

"hadfasdfas"

herhangi hata yükseltin olduğunu. Python yorumlayıcısı için, sözdizimi veya anlambilim hataları olmadığı sürece kodunuzda anlamsız bir ifade varsa

Yardımlar umarım iyidir.

2

Dize yalnızca değerlendirildi ve yorumlayıcı, herhangi bir şeye atanmadığını fark ederek, atar. module.py üst kısmında

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

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

:

Ancak bazı özel yerlerde

, bu dize aslında öğenin __doc__ özelliğine atanan

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

Aslında docstrings içinde 'func .__ doc__' bağlanır – wim

+0

Evet, bunu özledim. Teşekkürler – MadeOfAir

1

@ sshashank124 cevabı I Bu üçlü alıntı dizeleri de https://docs.python.org/2/library/doctest.html 'un test edilmesinde kullanılmalıdır. Bu kod snippet'ini düşünün:

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() 

Bu küçük modülü içe aktarırsanız, some_function işlevini alırsınız.
Bu betiği doğrudan kabuktan çağırırsanız, üçlü alıntı dizesinde verilen sınamalar değerlendirilir ve rapor çıktıya yazdırılır.

Üçlü tırnaklı dizgiler, yazı tipi dizgisi olarak yorum olarak, belge dizisi olarak ve yüklenmemişler için kapsayıcılar olarak ele alınabilir.

+0

Anlamadım, bu senaryoyu çalıştırdığımda tam olarak ne olur. Birincisi, x ve y için değerin ne olacağından emin değilim? Lütfen detaylandırır mısın? Teşekkürler – Kraken

+0

Eğer '.py' gibi bir dosya olarak kaydederseniz, 'some_module.py' gibi bir modül olur. Eğer ithal ederseniz '__name__ == '__main __'' 'False' yani sihir gerçekleşmez. Ama eğer onu kabuktan çağırırsanız'python some_module.py' son iki satır idam edilir. Bu durumda 'doctest.testmod()' Python unittests için docstring tarar. Yani '' '' '' 'execute '' anlamına gelir. Snippet'imde ilk açığı “bazı işlevler (5, 4)” olarak adlandırılıyor. Bu çağrının beklenen sonucu bir sonraki satıra yerleştirilir. Bazen üçüncü bir üçüncü sırada olduğu gibi istisna bekleniyor. Sonuç beklendiği gibi olursa, başarılı olur. – ElmoVanKielmo