3. Python
Python е скриптов, интерпретативен и обектно-ориентиран
език за програмиране. Създаден е в началото на 90-те години
от Гуидо ван Росум. Python предлага голямо бързодействие за
разработка, тъй като се интерпретира и няма необходимост от
компилиране.
4. Python
Предимства:
Използване на динамични типове данни
Платформо-независим език
Опростен и лесен синтаксис
Вградени структури от данни като – низове, списъци, tuple и речник.
Автоматично управление на паметта
Разнообразни библиотеки
Скалируемост
5. Динамични типове данни
Динамично типизиран (dynamic typing)
език - Типовете на данните се определят
по време на изпълнението. Работи на
принципа duck typing - Оценява типа на
обектите според техните свойства.
В Python променливите са от динамичен
тип, т.е. може на една променлива да се
присвои целочислена стойност, а след
това да й присвоим някакъв низ от
символи.
Предимството на динамичните данни е
създаването на генерализиран код.
7. Опростен и лесен синтаксис
За разлика от други езици, Python не разделя отделни блокове код
като използва { } за начало и край. Python използва
индентация/отстъп/ за разделянето на отделни блокове. Като
разграничител между програмните фрагменти се използва нов ред.
Това улеснява прочитането и разбирането на кода. Python съдържа
прости конструкции, характерни за функционалния стил на
програмиране, които му придават допълнителна гъвкавост.
8. Вградени структури от данни
Основните структури от данни предоставени от Python включват
низове, списъци, tuple/комплект – списък, който може да бъде
променян/ и речник.
Пример за списък с Python
9. Автоматично управление на паметта
Python използва Garbage Collector като Java т.е. вътрешната
реализация на езика се грижи за управлението на паметта.
Потребителят не трябва да се притеснявате за динамичното
разпределение на паметта и деразпределнето й. Ако е необходимо,
Python автоматично разпределя паметта и автоматично я
деразпределя, когато се приключи с използването й. Също така може
да се увеличи или намали размера на й, в зависимост от това какво е
необходимо.
10. Разнообразни библиотеки
Стандартната библиотека на Python е много обширна и може да се
използва за най-различни области, включително в Internet, в
математиката и в обработката на низове. Също така има и библиотека
за работа с низове и изпращане/получаване на електронна поща.
Освен основната библиотека, може да се използват и други
библиотеки, достъпни в интернет.
11. Скалируемост
Python е съвместим с други езици. Предоставя по-добра структура и
поддръжка за големи програми, отколкото за shell програмирането.
12. Типове данни и оператори
Променлива
Име на променлива
Типове данни
Оператори
Структури от данни - Списъци, tuple, речник
13. Променлива
Променливите са нищо повече от запазено място в паметта, в което се
съхраняват стойности. Когато се създава променлива това означава, че се
резервира място в паметта. Спрямо типа на променливата интерпретатора
разпределя памет и решава какво може да се съхрани в нея.
В Python променливите не се декларират, това става автоматично, когато
присвоим някаква стойност към променлива. Например number = 5. В
паметта се създава обект от целочислен тип, а променливата сочи към това
място в паметта.
14. Име на променлива
Python може да използва текст, числа, и (_) за имена на
променливите.
Не може да се започне с число като първи знак в името на
променливата.
Всички имена на променливи са case-sensitive /чувствителни към
използването на главни и малки букви/.
Примери: my_variable, abcd, My_variable.
16. Оператори, цифрово и низово
представянеИнформацията складирана в променливите може да бъде от
различен тип.
Типовете данни в Python:
Numbers
Strings
Boolen
None
Всяка стойност има тип. Можем да проверим типа на дадена
стойност с функцията type().
17. •int – целочислен тип, цили числа.
•long – целочислен тип с неограничен размер.
•float – реални числа с плаваща запетая.
•complex – комплексни числа. Не се използват често в програмирането
с Python.
Numbers – числови типове данни:
Данните се запазват като числови стойности. В Python се
поддържат четири числови типа:
18. Strings – низове/стрингове
Низ-ът представлява масив от символи. Текстовите низове имат произволна
дължина. Отделят се с единични (‘) , с двоини (“) или тройни кавички (“““).
Стринговете поддържат специални символи:
19. Boolean
Типа bool има две стойности – True/истина/ или
False/лъжа/. Изписват се винаги с главна буква.
20. None
Типа None е еквивалент на типа null в други езици. Когато
една функция не върне нищо, то тя връща None.
22. Аритметични оператори
+ Събиране
– Изваждане
* Умножение
/ Деление
% Остатък
** Степен
// Целочислено делене
Оператора за степен (**) е
оператор с по-висок приоритет
от останалите аритмитични
оператори.
Оператор за степенуване Оператор за целочислено деление
23. Оператора за събиране (+) се използва за сливане
на низове, а оператора за умножение (*) се
използва за повторение на низове. Операторът ([ ])
може да се използва за извикване на всеки от
елементите на стринга. Първия елемент винаги
започва от 0. Също така може да се използва и за
четене на елементи, без те да могат да бъдат
променяни.
Настъпва грешка, когато низ
оператори и елементи се променят.
24. Оператори за сравнение
== равно
!= не равно/различно
> по-голямо
< по-малко
>= по-голямо или равно
<= по-малко или равно
25. Оператори за присвояване
= присвояване
+= събиране и присвояване
-= изваждане и присвояване
*= умножение и присвояване
/= деление и присвояване
%= присвояване на остатък от деление
**= повдигане на степен и присвояване
//= целочислено деление и присвояване
26. Логически оператори
and и
or или
not инверсия
Побитови оператори
& двоично И
| двоично ИЛИ
^ двоично изключващо ИЛИ
~ двоично инвертиране (NOT)
<< преместване вляво (left shift)
>> преместване вдясно (right shift)
27. Lists - Списъци
Списъците имат структура от данни, подобна на масив. Списъците
съдържат в себе си елементи, които са разделени със запетая (,) и
са разположени в правоъгълни скоби ([ ]). Имат предимството, че в
тях може да се вмъква и изтрива с голяма гъвкавост. Python не
поддържа масиви. В списъци могат да се запишат данни, които са от
различен тип дори в рамките на един списък.
Основни методи са append, insert, remove, index, count, sort и т.н.
28. Създаване на списък.
В примера е показан списък от низове, отговарящи на дните от
седмицата, всеки един от елементите на списъка може да бъда достъпен
чрез slice оператора [ ] и с индекси започващи от 0 от началото на
списъка.
29. Метод append. Използва се да прибавяне на елементи към
списъка. Чрез този метод, добавеният елемент се
позиционира в края на списъка.
Метод insert. Също се използва за прибавяне на елементи към
списъка. Чрез този метод се избира конкретната позиция към,
която искаме да добавим елемент.
Метод remove. Използва се за премахване на елемент от списъка.
30. Метод index. Този метод връща позицията, на която отговаря
елемента.
Метод count. Този метод съобщава колко пъти елемента се
среща в списъка.
Метод sort. При използване на метода за сортиране,
елементите на списъка се подреждат във възходящ азбучен
ред, а при излозването на reverse метод се подреждат в
низходящ ред.
31. tuple
Tuple или комплект, същото като списък, но е read-only, т.е. можем
само да четем от него, без да променяме стойностите му. Можем да
създаваме tuple чрез оператора ( ).
32. Dictionary - Речник
Речниците са аналогични на асосиетивните масиви. Речника е
структура от данни, която се състои от двойка ключ:стойност. Може
да се достъпи стойността само чрез използването на ключ. Ще
настъпи грешка, ако се използва ключ, който не съществува.
Речниците се ограждат с къдрави скоби { }, за да се достъпят се
използват правоъгълни скоби [ ] .
34. Контролни структури
Циклите се използват за извършване на едни и същи или подобни
задачи няколко пъти, докато условните оператори се използват за
определяне дали да се изпълни задачата в съответствие със
зададените условията. Най-често срещаните цикли са “for" и "while "
структурите, а условията имат “if“ структура.
35. if, else, elif
Най-често използвания условен оператор е if.
Той служи за проверка дали дадено условие е
True (вярно), ако е така се прлеминава в
изпълнение на някакво действие. В противен
случай, когато резултата е False (грешен) се
изпълнява друго условие. С други думи, оценява
се условието и според получения резултат се
решава дали да се изпълни.
Ако условието (condition) е вярно се изпълнява Processing
Syntax 1, в противен случай ще се изпълни Processing
Syntax 2 .
36. if, else, elif
За разлика от други езици Python не отделя
условието в блок т.е. не е обходимо
използването на скоби ( ) за отделяне на
условията. Важно е да се внимава с точното
използване на индентация. Всеки вложен блок
код се определя с идентация спрямо
предходния. Не е нужно и използването на
скоби { }. Всеки блок започва само след
двуеточие :, което се поставя в края на
предишния ред.
Блокът завършва тогава, когато се върнем към
предходната идентация.
37. Възможно е да се тестват повече на брой
условия. Това става с if ... elif и else.
В някои случаи, когато if-условието не е
изпълнено и искаме да изпълним друг код
използваме else или elif.
С elif можем да проверим допълнителни
условия, ако if-условието не е изпълнено.
Else се изпълнява винаги, когато нито едно от
условията не е изпълнено.
if, else, elif
38. while
Цикъл while. While многократно
изпълнява вътрешния блок код.
Това продължава толкова дълго,
колкото условието води до True
резултат. При резултат False,
вътрешният блок код ще бъде
подминат, без да бъде изпълнен.
Използваме while, когато искаме
даден код да се изпълнява докато
условието е вярно. С помоща на
while можем да създадем
безкрайни цикли.
39. for
Цикъл for. Използваме for, когато искаме да изпълним даден
код определен брой пъти. Структурата на for е подобна на
while и е типична структура за повторения. Използва се най-
често за обхождане на списъци. For е като foreach в другите
езици. Не увеличава индекси, а обхожда структури от данни.
40. Break & continue.
От даден цикъл можем да излезнем по всяко време с
помоща на оператора break.
Операторът continue прекъсва текущата итерация и
продължава изпълнението на цикъла от следващия
елемент.
41. Range method
Това е универсална функция за
създаване на функции с аритметични
прогресии. Аргументите на функцията
трябва да бъдат цели числа.
Обикновено, когато работим с числа и
обхождаме нещо според номер,
използваме функцията range().
Съществува и xrange() функция , която
черпи по-малко ресурси тъй като
генерира числата на етапи, докато
range() функцията генерира всички
числа наведнъж.
Най-често range() се използва с цикъла
for.
43. Функции в програмирането
Функциите са основните структурни единици, от които се изграждат
програмите. Всяка функция се състои от множество оператори /може
и 0/, които се изпълняват като една обобщена операция или
действие. След като дадена функция бъде създадена, което се
осъществява чрез нейното дефиниране, тя може да бъде
изпълнявана многократно. Всяко изпълнение на дадена функция
може да бъде с различни данни, тъй като конкретните данни се
задават при извикване /активиране/ на функцията. В резултат на
изпълнението си функциите могат да връщат стойност, която се
нарича върната стойност - Return value , но могат и да не връщат.
44. Функции
Функциите осигуряват по-добра възможност за приспособяване на
приложението, което се прави и висока степен на преизползваемост
на кода.
До този момент познаваме функциите:
print
type
range
Те са част от многото вградени в Python функции. Освен вградените
функции, потребителят може да създава свои собствени. Те се
наричат потребителски дефинирани функции.
45. Дефиниране на функции
Ключовата дума def въвежда дефиниция на функция. Тя трябва да
бъде последвана от името на фукнцията и списък на формалните
параметри в скоби. Операторите, образуващи тялото на функцията,
започват от следващия ред и трябва да бъдат с отстъп.
Параметрите на функцията се наричат аргументи. Функциите могат да
приемат произволен брой аргументи.
Операторът return връща изпълнението от функцията, предавайки
стойност.
46. Return value - Връщаща стойност
Връщането на стойност е възможно
да се осъществи чрез return.
Функцията ще приключи, ако return
не е използвано. Връща се None.
Return може да върне само един
обект. Възможно е да се върнат
повече обекти, като се поставят в
tuple.
47. Параметри
Python използва препратки/референции/, за да
достави параметри на функциите.
За числови стойности, ако данните се променят в
рамките на функцията, това не се отразява на
самата функция.
Въпреки това, за някои параметри, формирани от
списъци, ако се порменят данните в рамките
функцията ще се види, че промененото
съдържание е отразено извън функцията.
48. Глобални и локални променливи
Глобалните променливи са променливи, които са декларирани извън
пределите на функцията.
Локалните променливи са променливи, декларирани в самата
функция.
49. pass
pass се използва за създаването на код, който няма да изпълни
никакъв вид действие. Код, който не прави нищо, но дори и да прави
няма да се получи никакъв резултат.
Използва се често. Например, когато се създава постоянна функция,
клас или модул при разработката на проект. Може да се присвои име,
но не и съдържание.
51. Модули
Модул – колекция от функции със специфични цели, които могат да
се преизползват в много различни случаи. В Python съществуват
около 200 модула, които от своя страна могат и да се комбинират.
Всеки модул може да вкара в себе си друг модул.
52. Използване на модули
Модулите се извикват с ключовата дума import, след което следва
името на модула, който искаме.
Можем да извикаме функцията, която ни трябва. Например math.sqrt.
Освен функции, могат да се използват и константи, които са
дефинирани с конкретно име.
57. Класове
Класът е една от характеристиките на обектно-ориентираното
програмиране. Това е съвкупност от променливи и функции, които са
обвързани в логическа структура и работят заедно. Класът служи
като модел за представяне на реални обекти и софтуерни обекти,
описвайки атрибути (свойства) и методи (поведение) на обектите.
Класовте са проектирани да създават и обработват обекти. Те са
един вид описание на обектите.
Класовете са един от най-полезните инструменти, които предоставя
Python.
58. Класове
Обектите се създават чрез дефиниране на класове. Всичко, което
искаме да създдем в програмите си са реални обекти, чийто атрибути
представляват тяхната характеристика, а методите са всъщност
начинът по който се държат. Методите са нещата, които обекта може
да прави.
Класовете всъщност са планове за създаването на обекти. Един клас
не е обект, а е дизайн за него.
59. Дефиниране на класове
Създаването на класове започва с ключовата дума class, следва името
на класа и две точки :. След това се разполага тялото на класа.
Може да се създада обикновен клас без никакво съдържание като се
използва ‘pass’.
60. Дефиниране на класове
Създаването на класове започва с ключовата дума class,
следва името на класа и две точки :. След това се
разполага тялото на класа.
Дефинираните функции в тялото на класа са методи на
класа. Методът е подобно на функция нещо, което се
съдържа в класа и или променя самия клас, или
извършва някакво действие, в зависимост от класа.
Първият аргумент self е reference към обекта, на който се
извиква.
Променливите, дефинирани в този блок са статични за
класа.
61. Инстанция
Клас инстанцията сочи към място в паметта, използвано за
съхранение и запазване на действителното съдържание на класа.
62. Връзка между клас и инстанция
isinstance метода може да се използва, за да се научи за връзката
между клас и инстанция. Инстанцията е поставена за първи
аргумент, а името на класа ще се използва като втори аргумент.
Това може да се използва, за да се разбере дали инстанция е
създадена за конкретния клас.
63. Конструктор и Деконструктор
Конструктора е метод, който се извиква автоматично от
интерпретатора при инициализацията на класа. В Python този метод
се нарича __init__(). Използва се за инициализация на обектите на
класа.
Аналогично, за да бъде унищожен обектът се използва деконструктор
__del__().
Конструктора и деконструктора са методи в клас, така че първият
аргумент трябва да сочи към тяхната инстанция.
64. Сатичен метод
В класа може да бъде създаден метод, който да е достъпен, без да е
необходимо създаването на инстанция на класа. За дефиниране на
този статичен метод се използва staticmethod.
65. Наследяване
Една от най-важните техники в ООП е наследяването.
Чрез него можем да създадем клас, в който да бъдат достъпни
всички атрибути и методи на родителския(базовия) клас, както и
някои нови методи и атрибути.
class DerivedClassName(BaseClassName):
<statement-1>
.
.
.
<statement-N>
66. Презареждане на оператори
Презареждането на обикновенните оператори позволява на
инстанциите на класовете да участват в прости действия като
например събиране и изваждане. Ако желаете да съберете два
обекта, за тях трябва да бъде дефиниран методът __add__.