Време је за прву лекцију, у којој ћу писати о основним типовима у Python програмском језику.

Пре него што пређем на основне типове, хтео бих истаћи да је Python динамички типизирани језик, што значи да није потребно декларисати промењиве, као и да оне у било ком тренутку могу променити тип. Ово је могуће јер се провера типова дешава током извршавања програма (run-time), а не за време компајлирања (compile-time).

Предности динамички типизираних језика би биле:

  • једноставност и језгровитост, без сувишног кода,
  • већа интерактивност,
  • бољи полиморфизам,
  • нема потребе чекати компајлер, код је одмах спреман за тестирање,
  • приликом дибаговања углавном се гледају логичке грешеке, а не синтаксне или семантичке,
  • лакше рефакторисање кода.

Са друге стране, статички типизиране језике одликују:

  • боље перформансе,
  • бољи интелисенс,
  • лакше је пронаћи делове кода, јер су јасно дефинисани,
  • боља сарадња са другим системима који користе статички типизиране податке,
  • мања вероватноћа да ће се поједине грешке десити за време run-time-а.

Време је да пређемо на основне типове:

str

str представља текстуални тип који чува низ Unicode-них карактера. Непромењив (immutable) је, што значи да се при мењању вредности ствара нови објекат.

url = 'kostakuu.rs'
print(url)  # print функција исписује прослеђење параметре на екран, док код испред кога се налази тараба представља коментар

При извршавању добили бисмо следећи испис:

kostakuu.rs

У новијим верзијама Python-а додани су f-стрингови који омогућавају лакшу и бржу конкатенацију (спајање) стрингова.

url = 'kostakuu.rs'
print('Адреса блога је ' + url)
print(f'Адреса блога је {url}')

Резултат је исти при обе конкатенације:

Адреса блога је kostakuu.rs
Адреса блога је kostakuu.rs

Поред конкатенације, f-стрингови могу послужити и за форматирање. А осим њих можемо искористити и format, center, ljust и rjust методе.

text = 'Моје име је {0} и живим у {1}'
print(text.format('Коста', 'Новом Саду'))

# Могуће је користити и именоване поред позиционих параметара
text = 'Моје име је {NAME} и живим у {CITY}'
print(text.format(NAME='Коста', CITY='Новом Саду'))

# Поред функције формат, постоји и метода format_map, која прима речник и користи његове вредности према кључу
values = {'NAME': 'Коста', 'CITY': 'Новом Саду'}
print(text.format_map(values))

# Метода center центрира текст у односу на задан број места, док rjust/ljust врши поравнавање у десну/леву страну
# Пред броја места поравнавања, ове методе могу примит и вредност којом ће попунити празна места (подразумевана вредност је размак)
text = 'kostakuu'
print(text.center(10, '-'))
print(text.ljust(10, '-'))
print(text.rjust(10, '-'))

При покретању добићемо следећи испис:

Моје име је Коста и живим у Новом Саду
Моје име је Коста и живим у Новом Саду
Моје име је Коста и живим у Новом Саду
-kostakuu-
kostakuu--
--kostakuu

Да бисмо учинили прво слово великим можемо искростити capitalize методу, док метода lower/upper сва слова претвара у мала/велика:

text = 'Hello World'
print(text.capitalize())
print(text.lower())
print(text.upper())

Испис:

Hello world
hello world
HELLO WORLD

Могуће је и приступати карактерима по индексу, претраживати стринг, као и направити подстринг:

text = 'Hello World'

# Други карактер
print(text[1])  # Позитивно индексирање креће од 0

# Последњи карактер
# У Python-у постоји негативно индексирање које почиње од -1, где је -1 последњи карактер, -2 претпоследњи итд.
print(text[-1])
print(text[-2])

# Претрага стринга где се враћа почетни индекс другог стринга
print(text.find('World'))
print(text.find('kostakuu'))  # Ако тражени стринг није подстринг добијамо вредност -1

# Да бисмо направили подстринг можемо искористити индексирање
print(text[1:])  # Од другог карактера па надаље
print(text[1:3])  # Од другог до четвртог
print(text[:-2])  # До претпоследњег
print(text[::-1])  # Стринг од назад

Испис:

e
d
l
6
-1
ello World
el
Hello Wor
dlroW olleH

За испитивање стринга можемо искористити неке од идућих функција:

text = 'kostakuu.rs'

# Да ли стринг почиње са другим стрингом
print(text.startswith('.rs'))

# Да ли се стринг завршава са другим стрингом
print(text.endswith('.rs'))

# Да ли је стринг алфанумерички
print(text.isalnum())

# Да ли су сви карактери цифре
print(text.isdigit())

Испис:

False
True
True
False

Још неке корисне методе су:

text = 'Ово је реченица.'

# Дељење стринга
print(text.split())  # Подразумевано дели по размаку, ако не проследимо другу вредност

# Чини почетно слово сваке речи великим
print(text.title())

text = '    kostakuu    '

# Уклањање размака
print(text.strip())  # Постоје и lstrip() и rstrip()

Извршавањем добијамо следећи резултат:

['Ово', 'је', 'реченица.']
Ово Је Реченица.
kostakuu

int, float

int представља целоброји тип који чува нумеричку вредност. Припада immutable типовима. За разлику од Python 2, Python 3 нема поделу на int и long типове, него сам int тип који је неограничене дужине.

float је тип који се користи за децималне бројеве, односно бројеве са зарезом. Ако нам је потребна већа прецизност можемо користити класу Decimal из истоименог пакета.

Неке од најчешће коришћених оператора можете погледати у наставку:

a = 4
b = 3

print(f'Збир је { a + b }')
print(f'Разлика је { a - b }')
print(f'Производ је { a * b }')
print(f'Количник је (враћа float) { a / b }')
print(f'Зокружени количник на мању вредност (враћа int) је { a // b }')
print(f'Остатак је { a % b }')
print(f'Негативно a { -a }')
print(f'Апсолутно a { abs(a) }')
print(f'a на b { a ** b }')

Резултат ове скрипте би био:

Збир је 7
Разлика је 1
Производ је 12
Количник је (враћа float) 1.3333333333333333
Зокружени количник на мању вредност (враћа int) је 1
Остатак је 1
Негативно a -4
Апсолутно a 4
a на b 64

За конверзију између типова можемо користити int() и float() функције:

a = 3
b = float(a)
print(b)

a = 3.7
b = int(a)
print(b)  # Одбациће децимални део
print(round(a))  # Извршиће уобичајно заокруживање

Резултат датог кода би био:

3.0
3
4

За лакше писање великих бројева можемо искористити доњу црту да одвојимо нуле. Она неће утицати на вредност броја већ искључиво служи за бољу читљивост.

a = 1000000000
b = 100000
print(a + b)

a = 1_000_000_000
b = 100_000
print(a + b)

И једна и друга print функција даће исти излаз:

1000100000
1000100000

Наравно, и излаз можете форматирати.

a = 1_000_000_000
b = 100_000
print(f'{(a + b):,}')

Извршавањем бисмо добили:

1,000,100,000

По сличном принципу могуће је форматирати и float вредности, шаблон је value:{width}.{precision}f. На примеру би то изгледало овако:

num = 300.213
print(f'{num:3.2f}')

Резултат:

300.21

Овиме завршавам прву лекцију. У наредној ћу писати о листама и речницима, чиме ћемо заокружити причу о основним типовима.


2 коментара

CNC · 15. марта 2020. у 00:05

У право време на правом месту 🙂
Свака част за блог и ове лекције.

Затворено за коментаре.