Я хочу почати читати вихідний код Python. З чого мені почати [закрито]


79

Я хочу почати читати вихідний код Python.

Мій досвід,

Я дуже добре знаю Python та Java. Я знаю деякі інші мови на різних рівнях володіння, але ні C / C + / особливо добре. Я вивчав C в коледжі, але ніколи не програмував його професійно.

Мої причини для читання цього коду.

  1. Зрозумійте, як python працює під капотом.
  2. Дізнайся C краще.

Для мене важливіше 1, ніж 2.

як мені робити це?


8
Чудове питання! Я не можу допомогти, бо я цього не зробив, але я справді зверну увагу на відповіді :)
AntonioMO

3
Жахливе питання! Я не можу зрозуміти, чому ви просто не почали читати джерело Python. Вам потрібне посилання на джерело? У чому питання?
S.Lott

6
Наприклад: Якби хтось запитав мене, як мені робити читання проекту Django, моя відповідь буде .. Почніть з urls.py, подивіться, на які URL-адреси реагує додаток / проект. Далі подивіться на модель, щоб отримати уявлення про проблемний домен. А тепер подивіться на подання, що відповідають кожній URL-адресі ... Я хочу отримати схожу відповідь на те, як вона структурована.
agiliq

@uswaretech: Будь ласка, не коментуйте власне запитання. Вам належить питання. Будь ласка, виправте це, щоб сказати, що ви насправді хочете знати. Ваше запитання - як написано - незрозуміле. Будь ласка, оновіть питання, а не додайте до нього коментарі.
S.Lott,

6
Чому такі приємні питання закриті?
Ніл

Відповіді:


46

Почніть з вивчення API Python C. Це великий і багатий API, і джерело Python, природно, використовує його всюди. Ви не зайдете дуже далеко до вихідного коду Python, перш ніж вам доведеться розуміти, що мається на увазі під Py_INCREF тощо.

Я провів презентацію на Pycon, в якій пояснив API: Вихрова екскурсія через розширення Python C, яка може вам виявитися корисною. Розширення C використовують той самий API, що і сам код Python.


2
+1 для API C: Настільки багато можливостей додавати акумулятори до Python, що це не смішно.
Джед Сміт

1
Чудова презентація, дуже інформативна.
mjgpy3

Посилання, яке ви дали, було дуже корисним. Дякую.
Ніл

22

По-перше, якщо вас здебільшого цікавить 1, я б почав із читання джерела Python різних модулів (а не переходу прямо до C). Щоразу, коли я читав джерело деяких модулів, я завжди дізнавався нове про програмування на Python.

По-друге, якщо ви намагаєтесь вивчити C краще, я особисто запропоную щось зовсім інше: запрограмуйте в ньому. Просто статичне читання вихідного коду не змусить вас краще розуміти C (або, принаймні, це обмежений підхід; це може зробити вас трохи кращим, але читання джерела достатньо).

Після програмування , по крайней мере помірно розмірний проект в C, то я б почати дивитися на джерело Python. Це справді єдиний спосіб пізнати C краще, і я справді думаю, що читання джерела C Python, не знаючи добре C, не приведе вас далеко.

Ідея для проекту С

Насправді, ось ідея для проекту С: напишіть інтерпретатор Python на мові C. Очевидно, що він не буде навіть завершений, і це досить складний проект, але якщо ви зосередитесь лише на деяких частинах мови, я думаю, це гарна ідея.

Це не тільки допоможе вам вивчити C, це допоможе вам набагато краще зрозуміти Python навіть до того, як заглянути в джерело: вам доведеться глибше розуміти багато речей у Python, ви зрозумієте компроміси в дизайні в як працює Python тощо.

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


15

1) Спочатку переконайтеся, що ви можете створити власний Python і запустити його в налагоджувач. Таким чином, ви можете не тільки додавати вирази друку, але й розбивати точки і слідувати потоку коду. Якщо у вас є toolsl, який дозволяє відстежувати виклики функцій, ідеально, він вам знадобиться.

2) Почніть з файлу, який реалізує типи даних. Їх дуже легко зрозуміти, і ви покращуєте свої знання мови на мові C під час читання коду.

3) Створіть схеми UML - тут вам можуть допомогти прості допоміжні інструменти для малювання, такі як Argo UML або MS Visio. Запишіть потік коду.

4) Прочитайте стартовий код для python. Подивіться, що і як ініціалізується базова інфраструктура.

6) Тай, щоб зрозуміти сторону Python на 100% - навіть складніші деталі реалізації, що таке AST і що таке зв’язані та незв’язані методи та як ви їх реалізуєте. Коли ви маєте на увазі модель, як би ви писали інтерпретатор python, ви можете перейти до останнього основного кроку.

7) Напишіть розширення налагоджувача за допомогою наданого швидкого налагоджувача C API. Це допоможе вам вдосконалити свої навички C.

8) Зробіть останній головний крок і пориньте в суть коду перекладача. Це навіть важко прочитати і зрозуміти для досвідченого програміста на С. Прочитайте, як вирази оцінюються, а вигляд методів кешується, кадри встановлюються для правил масштабування тощо. Це складно і складно - з точки зору складності та рядків коду.

9) Запустіть Adobe Photoshop і створіть гарний на вигляд диплом "Майстер Python" і покладіть його на стіну свого офісу.


2
Підкажіть, будь ласка, як запустити його в налагоджувач?
satoru

12

Завантажте джерело з веб-сайту Python. Скажімо, ви розпакували джерело в каталог з іменем Python-3.1.1. Я пропоную вам дві вихідні точки у вихідному коді Python, які допоможуть вам вивчити, як працює Python під капотом:

  • Вивчіть, як віртуальна машина Python виконує байт-код, згенерований з інтерпертера. Віртуальна машина Python знаходиться у файлі з іменем Python-3.1.1 / Python / ceval.c. Ядром віртуальної машини є цикл eval, який починається з функції PyEval_EvalFrameEx у ceval.c. Прочитайте джерело та вбудовані коментарі. Я впевнений, вам сподобалося б.

  • Інший варіант - подивитися, як реалізуються вбудовані типи даних python, такі як списки, словники та набори. Наприклад, набори реалізовані в Python-3.1.1 / Objects / setobject.c. Каталог Objects також містить реалізації інших типів даних.


1
Будь-яка інформація - корисна інформація. Дякуємо, чи можете ви дати більше вказівок, щоб розпочати?
Ніл

5

Питання досить широке, тому, мабуть, найкраща відповідь - просто завантажити джерело python і звестися з розуму. Виберіть модуль або розділ python, який ви добре знаєте, і перевірте, що знаходиться під капотом.


2
+1 - LOL на "і
збожеволіти

Я додав коментар до оригінального питання, який допоможе мені "з'їхати з
глузду

Ви порівнюєте свою ситуацію з кимось, хто хоче потрапити у джерело django, і заявляєте, що тоді слід почати, переглянувши "urls.py". Чому? Тому що це найголовніше? Я не згоден, я думаю, вам слід почати з модуля, який ви добре знайомі, щоб краще зробити висновки про те, який результат (і як) дають алгоритми, що не підлягають капоту.
Мізіпзор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.