2014-04-29 21 views
6

Więc rozumiem, że jeśli to zrobię następująceTriple cytat w Pythonie

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

ale co jeśli Oto mój skrypt python

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

Czego powyżej rzeczą zrobić? Czy jest to traktowane jako komentarz? Dlaczego nie jest to błąd składniowy?

Podobnie, jeśli robię

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

Jak powyższe dwa skrypty interpretować?

Dzięki

Odpowiedz

10

Potrójne cytaty ''' lub """ są po prostu różne sposoby reprezentowania ciągów. Zaletą potrójnych ofert jest to, że może on obejmować wiele linii, a czasami może służyć jako docstrings.

Powód:

"hadfasdfas"

nie budzi żadnych błędów dlatego python po prostu tworzy łańcuch, a następnie nie przypisać go do niczego. Dla interpretera Pythona, jest idealnie, jeśli masz bezsensowne oświadczenie w kodzie, o ile nie ma błędów składni lub semantyczne

Mam nadzieję, że pomaga.

2

Ciąg jest oceniany, a tłumacz zauważający, że nie został przypisany do niczego, wyrzuca go.

Ale w niektórych szczególnych miejscach, to ciąg jest faktycznie przypisany do właściwości __doc__ urządzenia:

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

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

Na szczycie module.py:

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

Właściwie w docstrings dostaje się do "func .__ doc__' – wim

+0

Tak, tęskniłem za tym. Dzięki – MadeOfAir

1

Oprócz @ sshashank124 Odpowiedź muszę dodać, że potrójnie cytowane ciągi są również używane w testowaniu: https://docs.python.org/2/library/doctest.html

Rozważ ten fragment kodu:

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

Jeśli zaimportujesz ten mały moduł, otrzymasz funkcję some_function.
Ale jeśli wywołasz skrypt bezpośrednio z powłoki, testy podane w potrójnym cudzysłowie zostaną ocenione, a raport zostanie wydrukowany na wyjście.

Tak potrójnie cytowane ciągi mogą być traktowane jako wartości typu ciąg znaków, jako komentarz, jako docstrukcje i jako pojemniki do tworzenia rekordów.

+0

Nie rozumiem tego, więc co dokładnie dzieje się po uruchomieniu tego skryptu. Po pierwsze, nie jestem pewien, jaka będzie wartość x i y? Czy mógłbyś to rozwinąć? Dzięki – Kraken

+0

Zapisanie go jako pliku z rozszerzeniem '.py' jak' some_module.py' staje się modułem. Jeśli go zaimportujesz, to '__name__ ==" __main __ "' jest 'Fałszem', więc żadna magia się nie dzieje. Ale jeśli wywołasz go z powłoki, tj.'python some_module.py' wykonuje ostatnie dwie linie. W tym przypadku 'doctest.testmod()' zeskanuje docstring dla unittests Pythona. Więc znajduje '>>>', co oznacza 'execute'. W moim urywku najpierw unittest wywołuje 'some_function (5, 4)'. Oczekiwany wynik tego połączenia zostanie umieszczony w kolejnej linii. Czasami oczekuje się wyjątku, jak w trzecim unittest. Test powiedzie się, jeśli wynik będzie zgodny z oczekiwaniami. – ElmoVanKielmo

Powiązane problemy