2009-12-20 11 views
30

Czytałem, że Python robi wszystko "bloków kodu" wcięcia, a nie z nawiasami klamrowymi. Czy to prawda? Więc funkcje, czy są i takie rzeczy pojawiają się bez otaczania ich klockiem za pomocą nawiasów klamrowych?Czy to prawda, że ​​nie mogę używać nawiasów klamrowych w Pythonie?

+7

http://stackoverflow.com/questions/1003841/how-do-i-move-the-turtle-in-logo – Skilldrick

+11

W rzeczywistości Python obsługuje nawiasy klamrowe, BEGIN/END i prawie wszystkie schematy blokowe innych języków: zobacz http: //www.python. org/doc/humour/# python-block-delimited-notation-parsing-explain! –

+32

"Żadne pytanie nie wystarcza nowicjuszowi" (cytat z SO FAQ). SO dotyczy pytań, na które można odpowiedzieć. Uważam, że obie są tu prawdziwe. Być może dla Pythoneerów jest to banalne pytanie, ale co z tego? Inni pytają "jak znaleźć sekundy poza znacznikiem czasu" lub "co to jest liczba szesnastkowa" i nikt nie narzeka. – Abel

Odpowiedz

245
if foo: #{ 
    print "it's true" 
#} 
else: #{ 
    print "it's false!" 
#} 

(Oczywiście jest to żart).

+0

To jest możliwe. chłodny! – openfrog

+4

@openfrog: nie, nie, to tylko komentarze w jednym wierszu ... (a on powiedział, że to był żart) – Abel

+3

@Abel jest poprawny. Powinienem wyjaśnić ten żart w komentarzu, na wszelki wypadek. –

7

Tak.

if True: 
    #dosomething 
else: 
    #dosomething else 

#continue on with whatever you were doing 

Zasadniczo, gdziekolwiek miałbyś otwarcie nawias klamrowy, użyj zamiast niego dwukropka. Unindent, aby zamknąć region. Nie trzeba długo czekać, aż poczuje się zupełnie naturalnie.

9

Yup :)

I jest (zazwyczaj) różnica między 4 spacje i karcie, więc upewnij się, że standaryzacja wykorzystanie ..

+5

Bardzo zalecane jest używanie 4 spacji na karcie, więc zmień stare nawyki, jeśli aktualnie używasz tabulatorów :) –

+8

Nie ma mowy Zamierzam zmienić zakładkę dla spacji. Cały inny kod napisany przez 10 lat używa wcięć tabulacji bez żadnych problemów. – Jonny

+6

@Jordan Messina Nie zgadzam się, i zdecydowanie tak. W przypadku wcięć zakładki są znacznie lepsze od spacji. Wiem, że Python oficjalnie zaleca używanie spacji, ale żałuję, że nie. – antred

23

Tak. Kręcone szelki nie są używane. Zamiast użyć : symbol, aby wprowadzić nowe bloki, tak:

if True: 
    do_something() 
    something_else() 
else: 
    something() 
+2

Jak zakończyć blok? – Jonny

+1

Możesz chcieć przepisać nazwy funkcji, aby były zgodne z PEP 8. Na pytania dla początkujących należy odpowiedzieć najlepiej wyglądającymi przykładami. – dnevins

+2

@ Jon: Bloki są kończone niejawnie, przez outdent/dedent/unindent - tj. Po zmniejszeniu poziomu wcięcia o jeden. Nie ma wyraźnego znaku, który jest używany do oznaczania końca bloku. Oznacza to, że w przeciwieństwie do C, na przykład, nie można mieć wielu bloków na tym samym poziomie, ponieważ spowodowałoby to niejednoznaczność. –

29

Prawidłowe dla bloków kodu. Jednak słowniki są definiowane w Pythonie za pomocą nawiasów klamrowych:

a_dict = { 
    'key': 'value', 
} 

Ahhhhhh.

79

Można spróbować dodać wsparcie dla szelki wykorzystaniem future import oświadczenie, ale to nie jest jeszcze obsługiwany, więc dostaniesz błąd składni:

>>> from __future__ import braces 
    File "<stdin>", line 1 
SyntaxError: not a chance 
+1

i dla każdego, kto się zastanawia, to ważne stwierdzenie jest pisanką. Wyjątkiem jest program piszący w pythonie: "nie, nigdy go nie dodawaj" – Sirens

3

Jak wspomnieli inni, masz rację, żadnych nawiasów klamrowych w Pythonie. Ponadto, nie masz żadnego koniec lub endif lub endfor lub coś podobnego (jak w paskach lub ruby). Wszystkie bloki kodu są oparte na wcięciach.

2

Tak, bloki kodu w Pythonie są zdefiniowane przez ich wcięcia. Twórcy Pythona bardzo interesowali się samodzielnym dokumentowaniem kodu. Zawierały wcięcie w składni, jako sposób na wymuszanie dobrej praktyki formatowania.

Programowałem w Pythonie przez kilka lat i bardzo polubiłem jego strukturę kodu, ponieważ jest to naprawdę łatwiejsze. Czy kiedykolwiek zapomniałeś o zamkniętym kędzierzawym klamrze w dużym programie i spędziłeś godziny próbując je znaleźć? Nie jest to problem w Pythonie. Kiedy opuściłem tę pracę i musiałem zacząć używać PHP, naprawdę brakowało mi składni Pythona.

+9

"Czy kiedykolwiek pominęliście nawiasy klamrowe w dużym programie i spędziliście godziny próbując je znaleźć?" Nie, nigdy. Ale miałem kilka narzędzi i edytorów, które kilkakrotnie zepsuły białe znaki i nie potrafiłem rozróżnić wyniku. – alexh

+1

@ Alaksh Czas naprawdę się zmienił! Z powrotem w B.C. dni (przed telefonami komórkowymi) nie zawsze mieliśmy edytory tekstu zdolne do automatycznego dopasowywania lub automatycznego wstawiania aparatów ortodontycznych, paren itp. Wierzę, że twoje doświadczenie pokazuje, że rozwój funkcji wykrywania białych znaków ogólnie opóźnia się w porównaniu z dopasowywaniem nawiasów. Są edytory tekstu specjalnie zaprojektowane dla Pythona, które nie zepsują białych znaków. Wskazówka: upewnij się, że masz ustawiony edytor, aby identyfikować spacje i tabulatory. –

2

Python with Braces to wariant Pythona, który pozwala dokładnie to zrobić. To jest projekt, nad którym ostatnio pracowałem razem z moim przyjacielem.

4

Python nie korzysta z nawiasów klamrowych dla bloków kodu:

>>> while True { 
    File "<stdin>", line 1 
    while True { 
      ^
SyntaxError: invalid syntax 

>>> from __future__ import braces 
    File "<stdin>", line 1 
SyntaxError: not a chance 

(Zauważ, że „Nie ma mowy” wiadomości - jest to pisanka odzwierciedleniem tej decyzji projektowych.)

Jako język zaprojektowany tak, aby był łatwy w użyciu i czytany, Python używa dwukropków i wcięć do oznaczania bloków kodu. Definiowanie bloków kodu przez wcięcie jest niezwykłe i może być zaskoczeniem dla programistów, którzy są przyzwyczajeni do języków takich jak C++ i C#, ponieważ te (i wiele innych języków) nie dbają o dodatkowe białe znaki lub wcięcia. Ta zasada ma na celu zwiększenie czytelności kodu w języku Python, kosztem pewnej swobody programisty w używaniu różnych ilości białych znaków.

Zwiększenie poziomu wcięcia wskazuje początek bloku kodu, a zmniejszenie oznacza koniec bloku kodu. Zgodnie z konwencją każde wcięcie ma szerokość czterech pól.

Oto prosty przykład, który podsumowuje wszystkie liczby całkowite od 0 do 9. Uwaga, która waha się w Pythonie obejmować pierwszą wartość, aż do, ale nie w tym ostatnim wartość:

j = 0 
for i in range(0, 10): 
    j += i 
print(j) 
+0

Kolejny piękny klejnot w Pythonie –

Powiązane problemy