@PACTAnew18

Как посмотреть тело функции в python?

Как посмотреть тело функции в python к примеру sum(), min(), max() и других?
  • Вопрос задан
  • 1247 просмотров
Пригласить эксперта
Ответы на вопрос 3
drygdryg
@drygdryg
Python-разработчик
Поскольку самая популярная и эталонная реализация Python: CPython имеет открытый исходный код, вы можете найти исходники встроенных функций в репозитории с исходными кодами CPython: https://github.com/python/cpython.
Некоторые встроенные функции написаны не на Python, а на том языке, на котором написан сам интерпретатор Python: на Си, поэтому, скорее всего, там вы не найдёте легкочитаемый исходный код функций sum, min, max и др.
Но в случае, когда функция или любой другой объект написан на Python, посмотреть его исходный код можно с помощью inspect.getsource:
>>> import inspect
>>> import requests
>>> print(inspect.getsource(requests.get))
def get(url, params=None, **kwargs):
    r"""Sends a GET request.

    :param url: URL for the new :class:`Request` object.
    :param params: (optional) Dictionary, list of tuples or bytes to send
        in the query string for the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    """

    return request("get", url, params=params, **kwargs)

Получить исходный код встроенной функции или метода, реализованного на Си внутри CPython, таким способом не получится:
Попытка получить исходный код функции sum

>>> import inspect
>>> print(inspect.getsource(sum))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.10/inspect.py", line 1139, in getsource
    lines, lnum = getsourcelines(object)
  File "/usr/lib/python3.10/inspect.py", line 1121, in getsourcelines
    lines, lnum = findsource(object)
  File "/usr/lib/python3.10/inspect.py", line 940, in findsource
    file = getsourcefile(object)
  File "/usr/lib/python3.10/inspect.py", line 817, in getsourcefile
    filename = getfile(object)
  File "/usr/lib/python3.10/inspect.py", line 797, in getfile
    raise TypeError('module, class, method, function, traceback, frame, or '
TypeError: module, class, method, function, traceback, frame, or code object was expected, got builtin_function_or_method


Также можно использовать IPython для получения того же результата более коротким путём:
In [1]: import requests

In [2]: %psource requests.get
def get(url, params=None, **kwargs):
    r"""Sends a GET request.

    :param url: URL for the new :class:`Request` object.
    :param params: (optional) Dictionary, list of tuples or bytes to send
        in the query string for the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    """

    return request("get", url, params=params, **kwargs)
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Для встроенных функций не получится. Они не на Питоне реализованы. Читай исходники, как посоветовал Влад Григорьев .
Ответ написан
Комментировать
@whoiam_frontend
Python-разработчик
Вызовите функцию help(sum), так же со всеми остальными. Функция help() используется для просмотра тела функции.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы