- •Мета робота
- •Короткі теоретичні відомості
- •1. Основи програмування
- •1.1 Присвоювання
- •1.2 Порівняння
- •1.3 Умовні твердження(висловлювання)
- •2. Послідовності
- •2.1 Операції над послідовностями різних типів
- •Способи ітерування елементів послідовностей
- •2.2 Поєднання послідовностей різних типів
- •2.3 Генерація виразів
- •3. Стиль програмування
- •3.1 Стиль програм Python
- •Серед редакторів програмування за адресою http://wiki.Python.Org/moin/PythonEditors можна знайти такі, які автоматично контролюють відступи у програмі та підсвічують синтаксичні помилки.
- •3.2 Процедурний чи декларативний стиль
- •3.3 Використання лічильників
- •4. Функції, як основа структурного програмування
- •4.1 Вхідні та вихідні дані функції
- •4.2 Передавання (передача) параметрів
- •4.3 Область дії змінних
- •4.4 Контроль типів параметрів
- •4.5 Функційна декомпозиція
- •4.6 Документування функцій
- •Порядок виконання роботи
- •Інтернет посилання
- •Методичні вказівки
4.3 Область дії змінних
При визначенні функції створюється нова локальна область дії змінних. Коли здійснюється операція присвоювання до нової змінної в тілі функції то ім’я цієї змінної визначено тільки в межах функції. Це ім’я недоступне поза функцією а також і в інших функціях. Тому, обираючи імена змінних в тілі функції можна не турбуватися про їх суперечності з іменами змінних, які зустрічаються в інших функціях.
Коли відбувається звертання за існуючим іменем в тілі функції, то інтерпретатор Python спочатку намагається розв’язати це звертання серед локальних імен функції. Якщо такого імені у функції не знайдено, пошук продовжується серед глобальних імен модуля. Якщо і тут немає такого імені, інтерпретатор буде намагатися його знайти серед імен вбудованих в Python. Це так зване LGB правило розв’язання імен: локальне, глобальне, вбудоване.
У функції можуть створюватися нові глобальні змінні за допомогою оголошення global . Але цього потрібно намагатися уникати. Визначення глобальних змінних у функції обмежує її переносимість (повторне використання) та робить її залежною від основної програми.
4.4 Контроль типів параметрів
Python не вимагає оголошення типів змінних при написанні програми і це дозволяє визначати функції, гнучкі до типів їх аргументів. Наприклад, програма морфологічного аналізу очікує послідовність слів , але ця програма не контролює, чи ця послідовність буде представлена як список, чи як стрічка, чи кортеж, чи ітератор (ітератор - новий тип змінних, який буде розглядатися пізніше). Тому при написанні програм, які будуть використовуватися в подальшому, потрібно щоб при неправильному виклику функцій видавались відповідні попередження (програма повинна контролювати типи змінних а аргументах функцій). Наприклад, в функції tag(), передбачається, що її аргументи завжди мають тип стрічка.
|
Функція повертає вірні значення для аргументів 'the' та'knight', але у випадку коли аргумент список #1— функція не реагує, незважаючи на те, що результат, який вона повертає однозначно помилковий. Потрібно зробити певні додаткові дії для того щоб забезпечити для параметру word функції tag()тип – стрічка. Просте рішення, це перевірити тип аргументу за допомогою стрічки програми: if not type(word) is str. Якщо тип word не стрічка, Python повертає спеціальне пусте значення, None. Це важливе уточнення, оскільки функція перевіряє тип аргументу і пробує повернути спеціальне, діагностичне значення при неправильних вхідних даних. Проте, таке рішення також небезпечне, тому що програмі, яка викликає функцію невідомо що None це спеціальне діагностичне значення і це значення може бути використано в інших частинах програми з невідомими наслідками. Такий підхід також буде помилковим у випадку якщо тип word буде Unicode а не стрічка. Правильним буде наступне рішення з використанням assert твердження разом з абстрактним типом Python basestring, який є суперкласом (надкласом) для стрічки і Unicode.
|
Якщо assert твердження не справджується, то генерується помилка, яка не ігнорується і зупиняє виконання програми і виводить відповідне повідомлення про помилку з описом помилки. Додавання операторів контролю (assert твердження) до програми допомагає виявляти логічні помилки і це є різновидом захищеного програмування. Більш загальний підхід - це документування параметрів кожної функції використовуючи стрічку документування.