Coding for KidsCoding for Kids
Творческие УровниИспытанияРуководство для Учителей
Голосовать за функции
Продвинутый курс разработки на Python
Глава
>
Уровень

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

Цель

Осмотрите старые предметы, спрятанные на чердаке, используя интроспекцию кода, чтобы выяснить, что они из себя представляют и как их использовать.

На чердаке находится кабинет, который редко используется, а также несколько старых сундуков, содержащих давно забытые ценности. Если не указано иное или если в записке не содержится необходимая информация, иногда может быть довольно сложно определить предметы или константы, собираемые в поле. Кроме того, бывает сложно определить, каких действий можно добиться с помощью конкретного объекта, или какие у него свойства. Чтобы решить эту проблему, мы можем использовать интроспекцию кода.

Интроспекция кода позволяет нам анализировать и идентифицировать определённые фрагменты кода, а также определить некоторые из их свойств. Для этого мы будем использовать четыре (4) встроенные функции интроспекции, входящие в базовый код python: type() , id() , repr() , dir() и help() . Они работают следующим образом:

  • type(): Функция сообщает, какого типа объект находится в переданном аргументе. Например, если вы передадите переменную, функция определит объект как переменную.
  • id(): Каждый объект, когда-либо созданный в python, имеет уникальный идентификатор, который определяет объект в коде. Передав объект в качестве аргумента этой функции, будет возвращён уникальный идентификационный номер объекта.
  • repr(): Преобразует значение, не являющееся строкой, в строку, что полезно для преобразования данных в читаемый формат.
  • dir(): Отображает все атрибуты, которыми обладает объект, что полезно для определения того, что можно сделать с объектом определённого типа.
  • help(): Отображает всю информацию о заданном объекте, функции, классе и т.д., которая доступна в реестре python.

Кроме того, у нас есть новая асинхронная функция под названием display(). Эта функция аналогична функции read(), но позволяет отображать динамические данные, подобно функциям интроспекции кода, которые также генерируют динамические данные. Ее синтаксис выглядит следующим образом: await player.display( -data-) . Все эти функции будут полезны для анализа данных; это удобно, когда мы используем методы и начинаем импортировать новые функции, а также для анализа любого кода, из которого мы хотим получить свойства.

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

Для каждого крестика повернитесь к сундуку и используйте функцию open() для его открытия, затем функцию collect() с константой, соответствующей цвету ковра, чтобы забрать её из сундука. Используйте функцию интроспекции type() для определения типа константы, находящейся в сундуке; вывод этой функции является необработанными данными, и в этом случае используется функция repr() для преобразования данных в строку. Затем примените функцию speak() для отображения полученной строки, которая получается в результате объединения функции и константы, например: player.speak(repr(type(red_container))). После этого вызовите функцию speak() с константой, чтобы напрямую идентифицировать содержимое, например: player.speak(red_container).

После того как все три (3) константы будут собраны, проанализированы и идентифицированы, пройдите к светлому кресту перед столом. Создайте три переменные с именами: item_id_red , item_id_green , item_id_blue — они будут использоваться для хранения идентификационных номеров каждой из собранных констант. Используйте функцию интроспекции id() для получения уникального идентификационного номера константы, передав её в качестве аргумента. Соотнесите имя переменной с именем константы, используя следующий формат, например: item_id_red = id(red_container). Повторите для всех трех (3) переменных и констант.

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

Теперь, когда список был внесён в учет, пройдите к темному кресту на фиолетовом ковре и повернитесь к столу. Здесь мы собираемся использовать функцию dir(), чтобы определить, какие атрибуты есть у списка, однако вывод этой функции представляет собой необработанные данные, которые могут быть сложно отображены. Для этого мы используем функцию repr(), чтобы преобразовать данные в читаемую строку. Создайте переменную с именем item_attributes и сохраните в ней полученную строку, следующим образом: item_attributes = repr(dir(item_list)). Наконец, используйте функцию display(), чтобы убедиться, что она зафиксирована в записке на столе.

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

Книга Кода