Coding for KidsCoding for Kids
Креативні РівніВикликиПосібник для Вчителів
Голосувати за функції
Поглиблений курс розробки на Python
Розділ
>
Рівень

Математичні модулі
Інтроспекція коду

Мета

Перевірте декілька старовинних речей, схованих на горищі, використовуючи інспекцію коду, щоб дізнатися, що це за об'єкти та як вони застосовуються.

На горищі є офіс, який рідко використовується, та кілька старих скриньок, що містять деякі дорогоцінності, які давно забуті. Якщо не зазначено інакше або якщо меморандум не містить інформації, інколи буває досить важко ідентифікувати речі чи константи, що збираються в полі. До того ж, може бути складно визначити, що саме можна зробити із певним об'єктом або які його властивості. Для вирішення цих питань ми можемо використати інспекцію коду.

Інспекція коду дозволяє нам оглядати та ідентифікувати певні фрагменти коду і вказувати деякі з його властивостей. Для цього ми використовуватимемо чотири (4) вбудовані функції інспекції, що входять до складу базового коду Python: type(), id(), repr(), dir() і help(). Вони працюють наступним чином:

  • type(): Функція повідомляє, до якого типу належить об'єкт, переданий як аргумент. Наприклад, якщо ви передасте змінну в якості аргументу, функція ідентифікує об'єкт як змінну.
  • id(): Кожному об'єкту, створеному в Python, присвоєно унікальний ідентифікаційний номер, що визначає об'єкт у коді. Передавши об'єкт як аргумент, ця функція повертає унікальний ідентифікаційний номер об'єкта.
  • repr(): Перетворює значення, що не є рядком, у рядок; корисно для перетворення даних у читабельну форму.
  • dir(): Відображає всі атрибути, якими володіє об'єкт, що корисно для визначення того, що можна зробити з певним типом об'єкта.
  • help(): Відображає всю інформацію про заданий об'єкт, функцію, клас тощо, що є в реєстрі Python.

Крім того, у нас є нова асинхронна функція — display(). Ця функція схожа на read(), але дозволяє відображати динамічні дані, подібно до функцій інспекції коду, які генерують динамічні дані. Її синтаксис наступний: await player.dysplay( -data-). Усі ці функції будуть корисними для аналізу даних, як при використанні методів та імпорті нових функцій, так і для аналізу будь-якого коду, з якого ми хочемо визначити властивості.

Ми використовуватимемо ці функції, щоб ідентифікувати та каталогізувати предмети, що зберігаються на горищі. Для початку перейдіть до темних позначок X над кольоровими килимами, починаючи з того, що знаходиться на червоному килимі. У цій області є три (3) константи: red_container, green_container і blue_container; ці константи представляють контейнери в кожній скрині, що відповідають кожному кольоровому килиму.

Для кожної позначки X оберіть скриню і використайте функцію open() для її відкриття, а потім функцію collect() із константою, що відповідає кольору килима, щоб забрати її зі скрині. Використайте функцію інспекції type() для визначення типу константи в скрині; вивід, який вона повертає, є сирими даними, тому ми застосовуємо функцію repr(), щоб перетворити його у рядок. Використайте функцію speak(), щоб відобразити отриманий рядок як результат комбінації функцій і константи, наприклад: player.speak(repr(type(red_container))). Потім використайте функцію speak() із константою, щоб безпосередньо ідентифікувати вміст, наприклад: player.speak(red_container).

Після того, як усі три (3) константи будуть зібрані, інспектовані та ідентифіковані, перейдіть до світлої позначки X перед столом. Створіть три змінні з наступними назвами: item_id_red, item_id_green, item_id_blue; вони будуть використовуватись для збереження ідентифікаційних номерів кожної з зібраних констант. Використайте функцію інспекції id(), щоб отримати унікальний ідентифікаційний номер константи, передавши її як аргумент. Узгодьте назву змінної з назвою константи, використовуючи наступний формат як приклад: item_id_red = id(red_container). Зробіть це для всіх трьох (3) змінних та констант.

Після того, як усі три (3) змінні будуть заповнені, збережіть їх усі у список з назвою item_list і на світлій позначці X використайте функцію display(), щоб переконатися, що це зазначено в меморандумі на столі, наприклад: await player.display(item_list).

Після того, як список було занотовано, перейдіть до темної позначки X на фіолетовому килимі та оберіть стіл. Тут ми використаємо функцію dir(), щоб визначити, які атрибути має список; проте вивід є сирими даними, що може утруднювати їх відображення. Для цього ми застосовуємо функцію repr(), щоб перетворити дані у читабельний рядок. Створіть змінну з назвою item_attributes і збережіть отриманий рядок, наприклад: item_attributes = repr(dir(item_list)). Нарешті, використайте функцію display(), щоб переконатися, що це зазначено в меморандумі на столі.

Перейдіть до темної позначки X на білому килимі, щоб зробити те саме, що і з dir(), але з використанням help(): це відобразить усю документацію щодо використання об'єкта. Створіть змінну з назвою item_help і збережіть отриманий рядок, наприклад: item_help = repr(help(item_list)). Нарешті, використайте функцію read(), щоб переконатися, що це також зазначено в меморандумі на столі, для завершення рівня.

Книга Коду