Не знаю, как Вам, а мне всегда было интересно, как осуществляется связь между различными частями одной программы. Стоит оговориться, что здесь под программой я имел ввиду, именно код, а не исполняемый файл, или слепок памяти. А вообще с терминологий надо быть предельно аккуратными и тщательно подбирать каждое слово, претендующие на термин. Увы, аккуратностью я страдаю, особенно, когда работа нацелена на результат.
Не будем вдаваться в подробности организации пространства имен в Python. Откуда и как наш змей берет имена. Давайте лучше посмотрим, как мы можем ему показать, откуда эти имена взять. Этим занимается инструкция – import. Ну Вы с ней знакомы. А теперь давайте попробуем вызвать команду Register(), с параметром None, вместо всех запрашиваемых параметров.
Функция Register позволяет использовать None вместо ее параметров, но злоупотреблять этой возможностью мы не станем. В дальнейшем. В этом же посте мы передадим три параметра None, чтобы не возникло ошибок при работе скрипта, но при этом он ничего не сделал бы.
Итак. в прошлом посте мы просто вызвали Register с нужными параметрами. Попробуйте в том скрипте (см. предыдущий пост) заменить все в Register параметром None. Ошибки не возникло, но и работы тоже. Хотя скрипт корректно выполнил свою работу. Чтобы в этом убедиться, допишите после Register(None, None, None) инструкцию print(‘done’). Теперь просто проверим консоль и убедимся – скрипт работает верно.
Создаем новый скрипт. И пытаемся в нем вызвать Register(None, None, None). ЄAaолучилось? У меня влезла ошибка. Ну как так Register is not defined? В прошлый раз же он был вполне defined. Ну в прошлый раз у нас и билиотека Blender была imported =) импортирована. Импортируем.
import Blender
Register(None,None,None)
И снова наша функция не определена. Но она же точно есть – прошлый скрипт тому пример. Стираем наш Register(), от которого толку нет и так – он все еще не определен. И работаем с Boender. Просто попробуем найти в нем эту функцию.
Blender.Draw.Register(None,None,None)
Нашли. Заработала наша функция.
Продолжаем исследовать дальше. Сотрем Blender перед первой точной. Что за чудеса? На этот раз не определен Draw. Попробуем определить его.
import Blender
from Blender import Draw
Draw.Register(None,None,None)
Скрипт работает снова. Теперь попытаемся вызывать наш Register без всяких там точек. Для этого модифицируем 2ю строку.
import Blender
from Blender.Draw import *
Register(None,None,None)
Вот и вся любовь. Register стал определенным.
А теперь посчитайте, сколькими различными способами, мы вызвали одну функцию? Вот сколько путей сделать одно и тоже действие, и соответственно, при каждом действии код будет выглядеть иначе, хотя делать будет одно и тоже. Что выбирать, зависит только от Ваших предпочтений. Удачи Вам и до скорых встреч.
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий