Возможно ли в Python посмотреть код библиотеки?
Существует ли способ просмотреть код в библиотеке Пайтона? Например BeautifulSoup хочу посмотреть как реализованы методы find, find_all, но не найду(( использую pycharm как среду. Библиотека установлена, а как код посмотреть её методов не знаю((
Отслеживать
задан 28 авг 2022 в 21:35
Руслан Камов Руслан Камов
347 2 2 серебряных знака 15 15 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Нажмите на клавиатуре клавишу Ctrl и подведите курсор мыши к интересующему вас методу. Вы увидите, что метод стал ссылкой. Можете щелкнуть по ней и перейти к коду.

Отслеживать
ответ дан 28 авг 2022 в 23:43
716 2 2 серебряных знака 5 5 бронзовых знаков
@Namerek он использует.
29 авг 2022 в 5:28
@Namerek «использую pycharm как среду» написано же, э? А вообще в VSCode это тоже работает, насколько я помню.
29 авг 2022 в 5:33
@Namerek в вопросе об этом прямо написано
29 авг 2022 в 5:47
В PyCharm без мышки это делается через Ctrl+B. М меню Navigate есть ещё другие хоткеи для других переходов, например Ctrl+U — переход на суперметод.
Python: Стандартная библиотека
Python поставляется с набором полезных функций, которые составляют стандартную библиотеку. Обычно в нее входят тысячи функций, которые невозможно запомнить. Поэтому программист должен знать, где найти документацию по этим функциям, а также представлять результат, который хочет получить. По этим причинам программировать без интернета сложно.
Новички часто не понимают, как и где узнавать про функции, которые нужно использовать. При этом нет способа, который поможет решить эту проблему. По мере работы разработчики становятся опытнее, пополняют свой багаж знаний и практик. Постепенно они знакомятся с более интересными функциями, которые решают их задачи по-другому.
Вот советы, которые помогут повысить уровень профессионализма:
- Всегда отслеживайте, с каким типом данных вы работаете. Так вы найдете необходимую функцию в соответствующем разделе документации. Например, для работы со строками нужно изучать строковые функции
- Периодически открывайте раздел со стандартными функциями по вашей тематике, изучайте сигнатуры и способы использования.
- Чаще читайте чужой код на GitHub. Особенное внимание обращайте на код библиотек, которые используете
Если следовать этим советам и внимательно относиться к деталям, то уже скоро вы заметите, как развиваетесь и растете как профессионал.
Задание
Функция type() позволяет определить тип передаваемого аргумента. Название типа возвращается в виде строки. Например, вызов type(10) вернёт строку (int, это сокращение от integer — целое число).
print(type('wow')) #
Выведите на экран тип значения переменной motto .
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Полезное
- Справочник функций Python
- Как искать техническую информацию
Определения
- Стандартная библиотека — набор полезных функций, входящий в комплект поставки языка программирования.
Где хранятся модули в Python?

Система модулей даёт возможность логически организовать код на Python. Кроме того, группирование в модули значительно облегчает сам процесс написания кода, плюс делает его более понятным. В этой статье поговорим, что такое модуль в Python, где он хранится и как обрабатывается.
Модуль в Python — это файл, в котором содержится код на Python. Любой модуль в Python может включать в себя переменные, объявления функций и классов. Вдобавок ко всемe, в модуле может содержаться исполняемый код.
Команда import в Python
Позволяет использовать любой файл Python в качестве модуля в другом файле. Синтаксис прост:
import module_1[, module_2[. module_N]Как только Python-интерпретатор встречает команду import, он выполняет импорт модуля, если он есть в пути поиска Python. Что касается пути поиска Python, то речь идёт о списке директорий, в которых интерпретатор выполняет поиск перед загрузкой модуля. Посмотрите на пример кода при использовании модуля math:
import math # Используем функцию sqrt из модуля math print (math.sqrt(9)) # Печатаем значение переменной pi, определенной в math print (math.pi)Помните, что модуль загружается только один раз, вне зависимости от того, какое количество раз вы его импортировали. Таким образом исключается цикличное выполнение содержимого модуля.
Команда from . import
Команда from . import даёт возможность выполнить импорт не всего модуля целиком, а лишь конкретного его содержимого:
# Импортируем из модуля math функцию sqrt from math import sqrt # Выводим результат выполнения функции sqrt. # Нам больше незачем указывать имя модуля print (sqrt(144)) # Но мы уже не можем получить из модуля то, что не импортировали print (pi) # Выдаст ошибкуОбратите внимание, что выражение from . import не импортирует модуль полностью, а лишь предоставляет доступ к объектам, указанным нами.
Команда from . import *
Также в Python мы можем импортировать из модуля переменные, классы и функции за один раз. Чтобы это выполнить, применяется конструкция from . import *:
from math import * # Теперь у нас есть доступ ко всем функция и переменным, определенным в модуле math print (sqrt(121)) print (pi) print (e)Использовать данную конструкцию нужно осторожно, ведь при импорте нескольких модулей можно запутаться в собственном коде.
Так где хранятся модули в Python?
При импорте модуля, интерпретатор Python пытается найти модуль в следующих местах: 1. Директория, где находится файл, в котором вызывается команда импорта. 2. Директория, определённая в консольной переменной PYTHONPATH (если модуль не найден с первого раза). 3. Путь, заданный по умолчанию (если модуль не найден в предыдущих двух случаях).
Что касается пути поиска, то он сохраняется в переменной path в системном модуле sys. А переменная sys.path включает в себя все 3 вышеописанных места поиска.
Получаем список всех модулей Python
Чтобы получить полный список модулей, установленных на ПК, используют команду help("modules") .
Создаём свой модуль в Python
Для создания собственного модуля в Python нужно сохранить ваш скрипт с расширением .py. После этого он станет доступным в любом другом файле. Давайте создадим 2 файла: module_1.py и module_2.py, а потом сохраним их в одной директории. В первом файле запишем:
def hello(): print ("Hello from module_1")А во втором вызовем функцию:
from module_1 import hello hello()После выполнения кода 2-го файла получим:
Hello from module_1Функция dir() в Python
Возвратит отсортированный список строк с содержанием всех имён, определенных в модуле.
# на данный момент нам доступны лишь встроенные функции dir() # импортируем модуль math import math # теперь модуль math в списке доступных имен dir() # получим имена, определенные в модуле math dir(math)
Пакеты модулей в Python
Несколько файлов-модулей с кодом можно объединить в пакеты модулей. Пакет модулей — это директория, включающая в себя несколько отдельных файлов-скриптов.
Представьте, что у нас следующая структура:
|_ my_file.py |_ my_package |_ __init__.py |_ inside_file.pyВ файле inside_file.py определена некоторая функция foo. В итоге, дабы получить доступ к этой функции, в файле my_file нужно выполнить:
from my_package.inside_file import fooТакже нужно обратить внимание на то, есть ли внутри директории my_package файл init.py. Это может быть и пустой файл, сообщающий Python, что директория является пакетом модулей. В Python 3 включать файл init.py в пакет модулей уже не обязательно, но мы рекомендуем всё же делать это, чтобы обеспечить обратную совместимость.
Учимся читать код, изучая стандартную библиотеку Python
Итак, вы уже продвинутый новичок — вы изучили основы Python и способны решать реальные задачи.
Вы уже отходите от просмотра туториалов и чтения блогов; наверно, уже ощущаете, что в них излагаются одномерные решения простых придуманных задач; вероятно, вместо решения этой конкретной задачи вы хотите совершенствоваться в решении задач в целом.
Наверно, вы слышали, что нужно нарабатывать понимание чтением и написанием больших объёмов кода. Это правда.
Но какой же код нужно читать?
«Просто читай то, что нравится». А если вы не знаете, что вам нравится? А если вам не нравится что-то правильное?
Или хуже того — если вам нравится что-то неправильное и из-за этого у вас выработаются вредные привычки?
В конечном итоге, для этого ведь необходимо понимание… Но именно его мы и стремимся обрести.
«На GitHub куча проектов — выберите понравившийся и изучайте, как его реализовали разработчики». Однако самые успешные проекты довольно объёмны — с чего начинать?
И даже если вы знаете, с чего начинать, не всегда очевидно, как разработчики пришли к своему решению.
Да, вы видите код своими глазами, но он не говорит вам о том, почему разработчики написали его так, чего они не делали и как они рассуждали о проекте в целом.
Другими словами, из самого кода неочевидно, какой была философия его проектирования, и какие варианты решений разработчики рассматривали, прежде чем остановиться на конкретной реализации.
В этой статье мы рассмотрим некоторые модули стандартной библиотеки Python.
Примечание о стандартной библиотеке
В целом, стандартная библиотека Python неидеальна для изучения «хорошего» стиля.
Хотя все её модули полезны, они не особо однородны:
- их писали разные авторы;
- некоторые из них старые (стиль Python 10-20 лет назад был другим);
- им нужно было сохранять обратную совместимость (то есть невозможно провести рефакторинг багов и вносить крупные изменения в API).
Мы рассмотрим как раз некоторые из них.
Если игнорировать стиль, у стандартной библиотеки можно многому научиться, ведь она решает реальные задачи множества разных разработчиков.
Любопытно изучить различия в возможностях stdlib и её новых внешних альтернатив — разница между ними демонстрирует дефицит, который испытывают разработчики (ведь в противном случае они бы не заморачивались созданием альтернативы). Хорошим примером этого является разница между urllib и requests .
Как читать модули
Приблизительно в таком порядке:
- Познакомьтесь с библиотекой как пользователь: прочитайте документацию, поэкспериментируйте с примерами.
- Прочитайте соответствующее Python Enhancement Proposal (PEP). Интересное обычно содержится в разделах Abstract, Rationale, Design Decisions, Discussion и Rejected Ideas.
- Прочитайте код; ссылка на него приведена в начале каждой страницы документации.
statistics
Модуль statistics добавляет в стандартную библиотеку статистические функции; он не создавался в качестве конкурента таких библиотек, как NumPy , а «находится на уровне построителя графиков и научного калькулятора».
Он был внедрён в PEP 450. Если вы незнакомы с этим предложением, то это очень любопытное чтиво:
- В разделе Rationale предложение сравнивается с NumPy и самодельными решениями; он особенно хорошо демонстрирует, что и почему было добавлено в стандартную библиотеку.
- Также там есть раздел Design Decisions, в котором объясняется, какой была общая философия проектирования; в разделах Discussion и FAQ тоже есть интересные подробности.
«Большая часть документации предназначена для читателей, понимающих базовые концепции, но которые могут не знать (например), какую дисперсию им стоит использовать [. ] Однако документация избегает скучных математических подробностей».
Код относительно прост, а когда это не так, то в нём есть комментарии и ссылки на подробные объяснения или статьи. Это может быть полезным, если вы изучаете все эти концепции и вам проще читать код, чем математическиe условные обозначения.
pathlib
Модуль pathlib обеспечивает простую иерархию классов для работы с путями файловой системы; он является высокоуровневой альтернативой os.path .
Модуль был внедрён в PEP 428. Большинство примеров используется для иллюстрации лежащей в основе модуля философии, а код оставлен в качестве спецификации.
Код хорошо читается по следующим причинам:
- Вероятно, вы уже знакомы с этой тематикой; даже если вы не пользовались раньше pathlib , то могли работать с os.path , или с похожей библиотекой в каком-то другом языке.
- Это хорошее объектно-ориентированное решение. Оно использует объектно-ориентированное программирование с абстрактными (читай: изобретёнными) концепциями, чтобы улучшить структуру кода и его многократное использование. Наверно, это гораздо лучший пример, чем старый Animal–Dog–Cat–Duck–speak().
- Это хорошая тема для сравнительного изучения: pathlib и os.path решают одну задачу, однако в совершенно разных стилях программирования. Кроме того, существовало ещё одно предложение, которое было отклонено, а ещё есть не меньше пяти похожих библиотек; pathlib позаимствовал что-то от каждой из них.
dataclasses
Модуль dataclasses снижает объём бойлерплейта при написании классов, генерируя специальные методы наподобие __init__ и __repr__ . (См. в качестве введения этот туториал, потому что в нём используются гораздо более конкретные примеры, чем в официальной документации.)
Он был внедрён в PEP 557 в качестве упрощённой версии attrs . Раздел Specification схож с документацией; интересные вещи встречаются в Rationale, Discussion и Rejected Ideas.
Кроме того, это отличный пример метапрограммирования; этот аспект подробно рассматривается в докладке Реймонда Хеттингера Dataclasses: The code generator to end all code generators. [Слайды с доклада в HTML и PDF.] Если у вас возникли проблемы с пониманием кода, то сначала посмотрите доклад; для меня оказалось довольно полезным объяснение генерируемого кода.
Бонус: graphlib
Модуль graphlib был добавлен в Python 3.9, и на данный момент содержит только одну вещь: реализацию алгоритма топологической сортировки (вот описание того, что это такое, и почему он полезен).
Он появился не через PEP; однако у него есть issue со множеством комментариев от разных разработчиков ядра, в том числе Реймонда Хеттингера и Тима Питерса (известного своим «Дзен языка Python»).
Так как это, по сути, решённая задача, в обсуждениях рассматривается API: куда его вставлять, кто должен его вызывать, как представлять входные и выходные данные, как одновременно обеспечить простоту использования и гибкость.
В обсуждении пытаются примирить два различных способа использования модуля:
- Вот граф, верни мне все узлы в топологическом порядке.
- Вот граф, верни мне все узлы, которые можно обработать прямо сейчас (или потому, что у них нет зависимостей, или потому, что их зависимости уже обработаны). Это полезно для распараллеливания работы, например, для скачивания и установки пакетов, зависимых от других пакетов.
По сравнению с обсуждением issue, сам код очень мал — меньше 250 строк, и в основном состоит из комментариев и документации.
На правах рекламы
Серверы для разработчиков и не только! Дешёвые VDS на базе новейшего «железа» для размещения проектов любой сложности, от корпоративных сетей и игровых проектов до лендингов и VPN.



