нних, функцій і класів, плюс, виконуваний код, який дозволяє ініціалізувати модуль. Цей код виконується при початковому імпорті модуля, після чого інтерпретатор запам'ятовує, що модуль вже проімпортірован і ініціалізованим першим, і при подальших імпорт цього ж модуля код ініціалізації не виконується.
Змінні і незмінні об'єкти; адресна арифметика і посилання
Об'єкти в Пітоні бувають двох різновидів - змінювані і незмінні. Списки, наприклад - об'єкти змінювані, їх вміст і довжину можна змінювати. Оскільки ключами словників можуть бути тільки незмінні об'єкти, в Пітоні є спеціальний тип незмінних списків - кортежі. Числа, природно, об'єкти незмінні. Також незмінними є рядки, на відміну від багатьох інших мов програмування. Хоча класи, написані програмістами, породжують змінні об'єкти, у програміста є можливість написати клас, екземпляри якого можуть бути ключами словника [7].
Адресної арифметики в Пітоні немає. Взагалі. Тому разіменовать нульовий покажчик просто неможливо. Посилання (покажчики) в Пітоні є, але маніпулювання ними здійснюється прозоро для програміста. Насправді всі змінні в Пітоні є посиланнями на об'єкти; тому, наприклад, запис a=b означає в змінну a скопіювати посилання із змінної b raquo ;. Також списки і словники зберігають не об'єкти, а посилання на об'єкти. Присвоєння і розіменування посилань проводиться автоматично.
Кожен об'єкт в Пітоні зберігає лічильник посилань, і при такому копіюванні посилання цей лічильник збільшується. Лічильник ж посилань того об'єкта, на який змінна a вказувала раніше - зменшується. Коли лічильник досягає 0, об'єкт вважається невживаних, для нього викликається деструктор (якщо це екземпляр класу з деструктором), і пам'ять об'єкта звільняється.
Такий механізм називається синхронної збіркою сміття з лічильником посилань raquo ;. Крім нього, в Пітоні є асинхронний збирач сміття, гідність якого в тому, що він вміє розпізнавати циклічні посилання і очищати об'єкти, на які немає інших посилань (не з циклу). (Приклад циклічних посилань: l=[]; l.append (l)) [7]
Розглянемо детальніше пітоновскіе посилання. Створимо список і привласнимо його (насправді привласнимо посилання на нього) в змінну a: a=[21, 12, str ]. Тепер привласнимо посилання з a в змінну b: a=b. Змінимо список, на який посилається a, скажімо, додамо в нього вміст іншого списку: a +=[2000]. На який список посилається змінна b? На той же, що і a - на список з 4 елементів. Відбувається це тому, що b все ще зберігає посилання на той же список, що і a. А тепер привласнимо в a новий список: a=[12, 21]. Що тепер буде в b? А все той же список з 4 елементів. Присвоєння в a розірвало зв'язок між a і b. У змінній a тепер посилання на новий список, а в змінній b все та ж посилання на той же список.
Якщо a - змінна, що зберігає посилання на список, і присвоювання b=a копіює тільки посилання на той же список, то чи можна скопіювати сам список? Коротка відповідь - так, можна. Але не все так просто. Адже і сам список зберігає не об'єкти, а посилання на об'єкти. Чи повинні копіюватися ці посилання або повинні бути продубльовані і самі об'єкти? Пітон дає дві відповіді на це питання: можна зробити і так, і сяк. Перший варіант копіювання називається поверхневим raquo ;, другий - глибоким копіюванням. Глибоке копіювання враховує циклічні посилання. Класи, написані програмістом, можуть визначати методи, які беруть участь у копіюванні, тим самим допомагаючи процесу копіювання, для того щоб не включати в копіювання зайвої інформації [1].
Маніпуляції з незмінними об'єктами здійснюються шляхом створення нових об'єктів. Наприклад, якщо в рядку треба замінити символ, вихідна рядок розбивається на два підрядки, і з них (плюс новий символ) створюється новий рядок. Якщо у змінній a посилання на ціле число, то в результаті операції a +=1 в a виявиться посилання на нове число.
. 1.2 Заснований на мові python фреймворк Django
Django - вільний фреймворк для веб-додатків на мові Python, що використовує шаблон проектування MVC. Проект підтримується організацією Django Software Foundation.
Сайт на Django будується з одного або декількох додатків, які рекомендується робити відчужуваними і підключаються. Це одне з істотних архітектурних відмінностей цього фреймворку від деяких інших (наприклад, Ruby on Rails). Один з основних принципів фреймворку - DRY (англ. Do not repeat yourself)
Також на відміну від інших фреймворків обробники URL в Django конфігуруються явно за допомогою регулярних виразів, а не виводяться автоматично зі структури моделей контролерів.
Для роботи з базою даних Django використовує власний ORM, в якому модель даних описується класами...