Грамматика Python
Лексический анализатор разбивает код на токены.
Поток токенов преобразуется в AST.
AST компилируется в байт-код (ассемблер) для виртуальной машины Python.
Line structure
Physical line — заканчивается символом окончания строки (\n
или \r\n
).
Logical lines — заканчиваться токеном NEW LINE
.
Примеры — несколько физических строк, но одна логическая:
if 1900 < year < 2100 and 1 <= month <= 12 \
and 1 <= day <= 31 and 0 <= hour < 24 \
and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date
pass
month_names = ['Januari', 'Februari', 'Maart', # These are the
'April', 'Mei', 'Juni', # Dutch names
'Juli', 'Augustus', 'September', # for the months
'Oktober', 'November', 'December'] # of the year
Indent
Корректные отступы:
def perm(l):
# Compute the list of all permutations of l
if len(l) <= 1:
return [l]
r = []
for i in range(len(l)):
s = l[:i] + l[i+1:]
p = perm(s)
for x in p:
r.append(l[i:i+1] + x)
return r
Некорректные:
def perm(l): # error: first line indented
for i in range(len(l)): # error: not indented
s = l[:i] + l[i+1:]
p = perm(l[:i] + l[i+1:]) # error: unexpected indent
for x in p:
r.append(l[i:i+1] + x)
return r # error: inconsistent dedent
Expressions and statemens
Simple statmenet - помещаются в одну логическую строку, могут идти через
;
Compaund statmenet - содержит несколько simple statement
Можно:
if True: print(1)
Нельзя:
if True: if True: print(1)
Можно:
if True: print(2); print(2)
Life hack — ;
убирает лишний вывод в output Jupyter Notebook:
import matplotlib.pyplot as plt
plt.plot([1,2], [1,2], label="Label")
plt.legend();
Opertors
+ - * ** / // % @ << >> & | ^ ~ := < > <= >= == !=
Delimeters
( ) [ ] { } , : . ; @ = -> += -= *= /= //= %= @= &= |= ^= >>= <<= **=
' " # \
Unused symbols
$ ? `
Literals
literals — Литералы представляют собой константы, включаемые непосредственно в текст программы.
String literals
Примеры разных литералов
Python поддерживает несколько видов строковых литералов:
"Обычная строка\n"