мини|Синтакса и семантика Пајтона Синтакса програмског језика Пајтон је низ правила која дефинишу како ће програм у Пајтону бити написан и интерпретиран (са рачунарске стране као и стране људског читаоца).

Филозофија дизајна Пајтон је дизајниран да буде веома читљив језик. Има релативно неоптерећен визуелни дезен и често користи енглеске речи тамо где други језици користе знакове интерпункције. Пајтон циља ка једноставности и општост у дезену његових синтакси, осврћујући се на "Треба бити један - и само један - очигледан начин да се то уради", из "Зен Пајтона".

Ово се коси са начином рада Перл и Руби, "постоји више начина да се то уради".

Кључне речи Пајтон има следеће кључне речи или резервисане речи; оне не могу бити коришћене као идентификатори.

and as assert break class continue def del elif else except exec False finally for from global if import in is lambda None nonlocal not or pass print raise return True try while with yield

Увлачење Пајтон користи вајтспејс да ограничи програмске блокове, пратећи офсајд правило. Пајтон позајмљује ово својство од његовог претходника АБЦ: уместо интерпункција или кључних речи, он користи увлачење да прикаже блок у коме се одвија програмски код.

У такозваним "слободно-форматским" језицима, која користе структуру блокова из АЛГОЛ, блокови кода су раздвојени заградама ({ }) или кључним речима. У многим конвенцијама кода за ове језике, програмери конвенционо пишу код у оквиру блока, да га визуелно раздвоје од околног кода.

Замислите функцију, foo, која садржи један параметар, x, и ако је параметар 0 позваће bar и baz, у супротном позваће qux, пролазећи x, као и позвати себе рекурзивно, пролазећи x-1 као параметар. Ево су имплементације ове функције и у C и Пајтону:

foo функција у C са стилом писања К&Р:void foo(int x) { if (x == 0) { bar(); baz(); } else { qux(x); foo(x - 1);

}foo функција у Пајтону:def foo(x): if x == 0: bar() baz() else: qux(x) foo(x - 1)Пајтон се користи конвенцијом којом се програмери у АЛГОЛ стилу језика често користе. Штавише, у фриформ синтакси, од кад је увлачење игнорисано, добро увлачење не може бити форсирано од стране интерпретатора или компајлера. Неправилно увучен код може бити разумет са људске стране различито него што то може компајлер или интерпретатор. На пример:

Неправилно увлачење у C:for (i = 0; i < 20; ++i) a(); b(); c();Код је био намењен да позове функције a() и b() 20 пута. Али, the понављајући блок кода је само {a();}. Код позива a() 20 пута, и затим зове b() и c() само једанпут и једну и другу. Читачи овог кода могу бити преварени неправилним редоследом позивања функција b и c.

Грешке увлачења у Пајтону:def foo(x): if x == 0: bar() baz() else: qux(x) foo(x - 1)Овде, у супротности са горе наведеним Пајтон foo примером, позивна функција foo(x - 1) бива увек извршена, резултујући се у непрекидној рекурзији. Таква врста грешке увлачења (као што је случајно брисање увлачења у задњем реду) је могуће само у програмским језицима која не обележавају блокове са јасним ознакама, као што су закривљене заграде у C. У конкретно овом примеру чак ни едитор са аутоматским увлачењем не може спречити погрешнп понашање овог Пајтон кода. Ова не намерна грешка може лако проћи у базни код без претходног примећивања од програмера. У многим другим програмским језицима ово не би било могуће (брисање крајњих блокова обележја у C би приказало компајлерску грешку) и ово чини Пајтон синтаксе много мање робусним у односу на многе друге језике.

Оба знакова, размак и таб су тренутно прихваћени као форме за увлачење у Пајтону. Пошто много алата их визуелно не разликује, мешање размака и таб-а може направити багове који захтевају напоре да се нађу. Штавише, рутине форматирања која бришу вајтспејс пример, Форум (интернет)—могу уништити синтаксу Пајтон програма, где би код програма са заградама било теже да се прочита.

Многи популарни програмски едитори рукују Пајтоновим увлачењем без проблема, понекад након омогућивања у опцијама конфигурација.

Структура података Откако је Пајтон динамично писан језик, Пајтон вредности, не променљиве, носе тип. Ово има импликације на много аспеката на начин на који овај језик функционише.

Све вредности у Пајтону носе референце према објектима, и ове референце такође пролазе у функције; функција не може да промени вредност променљиве референце у позивној функцији (не сасвим, погледајте испод). Неки људи (укључујући Гвидо ван Росум самог) су звали ову параметарно-пролазну шему "Позвати по референци објекта." Референца објекта значи име, и пролазна референца је "алиас", на пример копија референце на исти објекат, баш као и у C/C++. Вредност објекта може бити промењена у позивној функцији са "алиас", на пример:>>> alist = ['a', 'b', 'c'] >>> def myfunc(al): ... al.append('x') ... print al ... >>> myfunc(alist) ['a', 'b', 'c', 'x'] >>> alist ['a', 'b', 'c', 'x']Функција "myfunc" је променила вредност "alist" са формалним аргументом "al", који је алиас од "alist". Али, било који покушај промене самог алиаса не би имало било какав ефекат на оригинални објекат. У Пајтону, не-најдубље-локално и не-декларисано-глобално доступни називи су сви "алиаси".

Поред динамично писаних језика, Пајтон је осредње провераван у писању. Имплицитна конверзија је дефинисана за нумеричке типове (као и за булеан), тако да особа може валидно умножити комплексан број са дугим целим бројем (на пример) без експлицитног кастинга. Али, не постоји имплицитна конверзија између (на пример) бројева и стрингова; стринг је неважећи аргумент математичкој функцији која очекује број.

Типови база Пајтон има широк опсег општих типова података. Поред конвенционалних целих бројева и децималне аритметике, он провидно подржава it аритметику арбитарне прецизности, комплексни бројеви, и бројеве у децималном запису.

Пајтон подржава широк спектар стринг операција. Стрингови у Пајтону су непроменљиви, тако да стринг операција као што је субституција карактера, да у другим програмским језицима може променити стринг у месту, враћа нови стринг у Пајтону.

Типови прикупљања Један од корисних аспеката Пајтона је концепт прикупљања типова. Генерално, колекција је објекат који садржи друге објекте на начин који је лако референциран или индексован. Колекције долазе у два основна облика: секвенце и мапирање.

Поређани секвенциони типови су листе, торке, и стрингови. Све секвенце су индексиране по позицији (од 0 до дужине - 1) и сви сем стрингова могу садржати било који тип објекта, укључујући више типова у истој секвенци. Оба стринга и туплеа су непроменљиви, чинећи их савршеним кандидатима за кључеве речника (погледајте испод) у месту.

Мапирање, у другу руку, су непоређани типови имплементирани у форми речника чија "мапа" је скуп непроменљивих кључева одговарајућим елементима (скоро као математичка функција). На пример, особа може дефинисати речник да садржи стринг "toast" мапиран на број 42 или обрнуто. Кључеви у речнику морају бити непроменљивог Пајтон типа, као што је то integer или стринг, зато што су имплементирани преко хеш функције. Ово много убрзава претрагу, али захтева да се кључеви не мењају (што такође резултира лошом расподелом у речнику).

Речници су такође центар унутрашњости језика јер се ослањају на језгро свих Пајтон објеката и класа: мапирање између променљивих назива (стрингова) и вредности чија имена референци су складиштени као речници (погледајте систем објеката). Пошто су ови речници директно доступни (преко својства објекта __dict__), метапрограмирање је једноставан и природан процес у Пајтону.

Скуп скупљајућег типа је додат у језгро језика у верзији 2.4. Сет је неиндексована, неуређена колекција која не садржи дупликате, и имплементира set theoretic операције као што су union, пресеци, difference, symmetric difference, и подскуп тестирање. Постоје два типа сетова: set и frozenset, једина разлика је та што је set променљив а frozenset непроменљив. Елементи у сету морају бити у могућности за хешовање и да буду непроменљиви. Тако да, на пример, frozenset може бити елемент регуларног set где обрнуто није могуће.

Пајтон такође пружа широку колекцију манипулативних могућности као што је уграђено проверавање садржаја и протокол генеричног понављања.

Систем објекта У Пајтону, све је објекат, чак и класе. Класе, као и објекти, имају класе, која су позната као њихова метакласа. Пајтон такође подржава вишеструко наследство и миксинс.

Језик подржава широку интроспекцију типова и класа. Типови могу бити читани и упоређивани—типови су инстанце type. Својства објекта могу бити претворена у речнике.

Оператори могу бити преоптерећени у Пајтону дефинисањем специјалног члана функција—на пример, дефинисање __add__ на класу омогућава особу да користи + оператор на кориснике из те класе.

Литерали

Стрингови Пајтон има разне облике литерала.

Нормални стринг литерали Могу се користити обични као и двојни наводници за навођење стрингова. За разлику у Unix језицима, Перл или Перл-инспирисани језици као што су Руби или Груви, обични и двојни наводници раде идентично, на пример, не постоји стринг уметање од $foo израза. Али, уметање може бити извршено користећи % string-format оператор, као што је Перл наредбаprint "I just printed $num pages to the printer $printer\n"једнака Пајтон наредби print("I just printed %s pages to the printer %s" % (num, printer))Али, тренутни стандард овог начина стринг форматирања је да се користи format метода стрингова:print("I just printed {0} pages to the printer {1}".format(num, printer))

Литерали вишелинијских стрингова Постоје и вишелинијски стрингови, који почињу и завршавају се са редом од три обичних и двојних наводника и раде као here documents у Перл и Руби.

Обичан пример са уметањем променљивих (користећи % string-format оператор) је:print("""Dear %(recipient)s,

I wish you to leave Sunnydale and never return.

Not Quite Love, %(sender)s """ % {'sender': 'Buffy the Vampire Slayer', 'recipient': 'Spike'})

Raw стрингови Коначно, сви претходно поменути облици стрингова долазе у "raw" облицима, и веома су корисни за регуларне изразе; поредити "@-quoting" у C#. Raw стрингови су оригинално намењени за регуларне изразе. Због ограничења токенајзера, raw стрингови могу да немају косу црту. Прављење raw стринга која држи Windows путању која се завршава са косом цртом захтева неки облик напора (често, користећи се косам цртама унапред уместо уназад, од кад Windows прихвата оба).

Примери укључују: # A Windows path, even raw strings cannot end in a backslash r"C:\Foo\Bar\Baz\" # raises SyntaxErrorr"C:\Foo\Bar\Baz\ ".rstrip() # avoids the error by adding and removing trailing space

# A regular expression matching a quoted string with possible backslash quoting r'"([^"\\]|\\.)*"'

# Reverse the arguments in a two-arg function call, e.g. foo(2, bar) -> foo(bar, 2). re.sub(r'\(([^,]*?),([^,]*?)\)', r'(\2, \1)', code) # Note that this won't work if either argument has parens or commas in it.

Повезивање у ланац суседних стринг литерала Стринг литерали појављујући се спојено и раздвојени само размаком (укључујући нове редове), су дозвољени и нагомилавани у један дужи стринг. title = "One Good Turn: " \'A Natural History of the Screwdriver and the Screw' </syntaxhighlight>је једнако title = "One Good Turn: A Natural History of the Screwdriver and the Screw"

Бројеви Нумерички литерали у Пајтону су нормалног типа, на пример 0, -1, 3.4, 3.5e-8.

Пајтон има произвољну дужину целих бројева и аутоматски повећавају просторно складиште по потреби. До Пајтона верзије 3, постојале су два типа целих бројева: традиционално просторно фиксирани цели бројеви и "дугачки" цели бројеви произвољног домена. Конверзија у "дугачке" целе бројеве је рађено аутоматски по потреби, и програмер обично није морао да буде свестан ова два типа целих бројева. У новијим верзијима језика, просторно-фиксни цели бројеви су потпуно нестали.