Два дня назад я задал NetEase вопрос с несколькими вариантами ответов:
Описание проблемы:
Python написан на языке C. Согласно характеристикам пространства имен, после компиляции следующего кода компилятором python всего получается () объектов PyCodeObject.
class A:
pass
def Fun():
pass
a = A()
Fun()
....что такое PyCodeObject? ? ?
это не очень долго
Поделитесь некоторыми подробностями обучения здесь. Например, я искал причину проблемы А, но в это время три проблемы B.C.D становились все более и более хаотичными, и наконец: сдаться. Попробуйте решить некоторые проблемы основательно, и вы потихоньку отправитесь в путь.
Хорошо, BB, все, что я хочу сказать, этоделать все тщательно, потому что тщательность принесетчудесная пустота, не желтая шутка, даПесня Цуй Цзяня (Синие кости)...
Интерпретируемый язык с нуля? Компилируемый язык?
Компилируемые и интерпретируемые языки:Например, вы написали книгу и хотите найти переводчика, который поможет вам перевести ее на историю английской марихуаны, чтобы вы могли стать интернет-знаменитостью. Затем ваш секретарь находит двух переводчиков, переводит и печатает:
1. Составленный перевод (язык): Переведите от начала до последнего знака препинания вашего произведения, затем начните печатать, 1 можно остановить
2. Интерпретативный перевод (язык): Так же, как ваша мама рассказывает вам истории у постели больного, переводите предложение за предложением или абзац за абзацем, предложение за предложением, а затем печатайте каждое предложение за абзацем, 2 всегда будет с вами.
Проанализируйте преимущества и недостатки двух методов.:
1. Высокая операционная эффективность, одноразовые лифтовые бунгало упаковываются и регистрируются, согласно вашему желудку, то есть, как только перевод будет завершен, эффективность выполнения будет очень высокой.
Например, когда вы попросили 1 перевести его для вас, вы обнаружили, что я написал слово неправильно, но если это 1, вы должны подождать, пока он переведет его, а затем исправить его и позволить ему перевести его снова. А как насчет 2-х переводов, построчно, построчно, просто нужно заново перевести эту строчку?
Небольшое резюме:
Чтобы преобразовать ваш код в язык, понятный компьютеру, есть два плана.
1. Компилируйте, как и C, после того, как он скомпилирован в машинный язык, он может быть выполнен непосредственно на машине, поэтому эффективность выполнения очень высока.
2. Объясните,Исключите процесс компиляции, построчные объяснения запускаются напрямую, как ruby
WTF, я так долго не говорил Python, так что же такое Python?
Как и Java (язык на основе виртуальных машин), Python — это язык, который сначала компилируется, а затем интерпретируется. Почему вы говорите, что он был скомпилирован? Это очень просто. Вы открываете Nieder pycharm, пишете файл .py и успешно его запускаете, вы найдете папку вЕще один .pyc файл, c означает complie, и используйте терминал для запуска файла .py, вы должны ввести python xxx.py, да, это слово должно разбудить интерпретаторСпи со своим МБ Эй, переведи для папы, не спи, идиот~
Давайте сначала поговорим о разнице между языками, а потом подумаем о Python
pyc и PyCodeObject
Сначала проведите небольшой тест. Я написал следующий код на этой машине. После успешного запуска я хочу посмотреть, есть ли файл pyc под моим файлом.
я вытираю?Почему не ВТФ?
Затем мы создаем новый файл .py и импортируем метод say из предыдущего файла memo.
А? Почему файл pyc снова отсутствует?
причина:PyCodeObject на самом деле является результатом, скомпилированным компилятором python в памяти.Файл pyc можно рассматривать как сохранение PyCodeObject на диске.Причина отсутствия файла pyc заключается в том, чтоПотому что интерпретатор python считает, что повторно используемые блоки кода заслуживают выполнения pycПеред выполнением проверьте в памяти, находится ли он в PyCodeObject.Если да, нет необходимости читать локальный файл pyc на диске.Процесс выглядит следующим образом
Итак, вернемся к первоначальному вопросу, кажется, что круг немного большой.
Прежде чем ответить на этот вопрос, позвольте мне объяснить концепцию -Code Block:
Когда компилятор Python компилирует исходный код Python, он создает объект PyCodeObject, соответствующий этому коду, для блока кода в коде.
Как определить, сколько кода считается блоком кода?
Правила определения блоков кода в Python: при вводе нового пространства имен или области видимости, даже при вводе нового блока кода.
То есть: пространство имен соответствует блоку кода, который соответствует объекту PyCodeObject.
А пока подумайте о пространстве имен как о контексте символа, сопоставлении имен с объектами.
В Python все классы, функции и модули соответствуют отдельному пространству имен, поэтому все они соответствуют объекту PyCodeObject.
class A:
pass
def Fun():
pass
a = A()
Fun()
После того, как компилятор Python скомпилирует приведенный выше исходный код, он создаст три объекта PyCodeObject: первый — блок кода, соответствующий всему файлу .py, второй — блок кода, соответствующий классу A, и третий — соответствующий объект f. Представляет блок кода.
Я проверил правильный ответ, и это было три. Встряхнув мою маленькую руку, я получил три балла. Это все, спасибо~