Как я могу увидеть исходный код встроенных методов Python? [Дубликат]

6
задан Mogsdad 27 July 2015 в 16:33
поделиться

4 ответа

Для модулей, классов, функций и нескольких других объектов вы можете использовать inspect.getfile или inspect.getsourcefile. Однако для встроенных объектов и методов это приведет к TypeError. Как полагают C0deH4cker, встроенные объекты и методы реализованы на C, поэтому вам нужно будет просмотреть исходный код C. isdigit - метод встроенного строкового объекта, который реализован в файле stringobject.c в каталоге Objects исходного кода Python. Этот метод isdigits реализуется из строки 3392 этого файла. См. Также мой ответ здесь на аналогичный, но более общий вопрос.

7
ответ дан Community 17 August 2018 в 18:48
поделиться

Метод isdigit(), о котором вы говорите, является встроенным методом встроенного типа данных. Смысл, источник этого метода написан на C, а не на Python. Если вы действительно хотите увидеть исходный код, я предлагаю вам перейти на http://python.org и загрузить исходный код Python.

6
ответ дан C0deH4cker 17 August 2018 в 18:48
поделиться
  • 1
    Мы используем PyCharm для разработки проекта python и запускаем его, есть ли исходный код python на нашей машине? в противном случае, как проект python запускается на наших машинах? – qg_java_17137 10 July 2018 в 04:03

Хотя я обычно соглашался с тем, что inspect является хорошим ответом, он падает, когда ваш класс (и, следовательно, метод класса) был определен в интерпретаторе.

Если вы используете dill.source.getsource из dill вы можете получить источник функций и лямбда, даже если они определены интерактивно. Он также может получить код для связанных или несвязанных методов и функций класса, определенных в карри ... однако вы не сможете скомпилировать этот код без кода объекта-объекта.

>>> from dill.source import getsource
>>> 
>>> def add(x,y):
...   return x+y
... 
>>> squared = lambda x:x**2
>>> 
>>> print getsource(add)
def add(x,y):
  return x+y

>>> print getsource(squared)
squared = lambda x:x**2

>>> 
>>> class Foo(object):
...   def bar(self, x):
...     return x*x+x
... 
>>> f = Foo()
>>> 
>>> print getsource(f.bar)
def bar(self, x):
    return x*x+x

>>> 

Для builtin, функции dill.source не будут работать ... HOWEVER ...

Вам все равно не придется прибегать к использованию вашего любимого редактора, чтобы открыть файл с исходным кодом (как это предлагается в других ответах) ). Существует новый пакет под названием cinspect , целью которого является просмотр источника для builtins.

0
ответ дан Mike McKerns 17 August 2018 в 18:48
поделиться

Вы можете попробовать распечатать method.__doc__ для документации по этому конкретному методу. Если вам просто интересно, вы можете проверить свой PYTHONPATH, чтобы узнать, откуда импортированы ваши модули, и посмотреть, не найден ли файл .py из этого модуля

0
ответ дан Pablo Mescher 17 August 2018 в 18:48
поделиться
  • 1
    лучше использовать help(str.isdigit) – Ashwini Chaudhary 28 June 2012 в 23:51
  • 2
    @Pablo, спасибо. не могли бы вы дать мне пример, используя случай в моем вопросе; как распечатать исходный код для next.isdigit()? – swoopin_swallow 28 June 2012 в 23:53
  • 3
    как сказал @AshwiniChaudhary, вы могли написать help (str.isdigit) или str.isdigit .__ doc__ – Pablo Mescher 28 June 2012 в 23:56
Другие вопросы по тегам:

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