Existe uma maneira de ver como as funções incorporadas funcionam em python? Não quero dizer apenas como usá-los, mas também como eles foram construídos, qual é o código por trás classificado ou enumerado etc ...?
fonte
Existe uma maneira de ver como as funções incorporadas funcionam em python? Não quero dizer apenas como usá-los, mas também como eles foram construídos, qual é o código por trás classificado ou enumerado etc ...?
Como o Python é de código aberto, você pode ler o código-fonte .
Para descobrir em qual arquivo um módulo ou função específico está implementado, geralmente você pode imprimir o __file__
atributo. Como alternativa, você pode usar o inspect
módulo, consulte a seção Recuperando código-fonte na documentação de inspect
.
Para classes e métodos internos, isso não é tão simples desde então inspect.getfile
e inspect.getsource
retornará um erro de tipo informando que o objeto está interno. No entanto, muitos dos tipos internos podem ser encontrados no Objects
subdiretório do tronco de origem do Python . Por exemplo, veja aqui a implementação da classe enumerada ou aqui a implementação do list
tipo.
enumerate
?sorted()
está em /Python/bltinmodule.c embora apenas chamalist.sort()
assim a fonte real está em /Objects/listobject.cAqui está uma resposta do livro de receitas para complementar a resposta do @Chris ' , o CPython mudou para o GitHub e o repositório do Mercurial não será mais atualizado:
git clone https://github.com/python/cpython.git
O código fará o checkout para um subdiretório chamado
cpython
->cd cpython
print()
...egrep --color=always -R 'print' | less -R
Python/bltinmodule.c
->builtin_print()
Aproveitar.
fonte
Eu tive que cavar um pouco para encontrar a fonte do seguinte,
Built-in Functions
pois a pesquisa renderia milhares de resultados. (Boa sorte procurando qualquer um desses para descobrir onde está a fonte)De qualquer forma, todas essas funções são definidas em
bltinmodule.c
Funções, que começam combuiltin_{functionname}
fonte
listobject.c
github.com/python/cpython/tree/master/ObjectsO shell do iPython facilita isso:
function?
fornece a documentação.function??
mostra também o código. Mas isso só funciona para funções python puras.Depois, você sempre pode fazer o download do código-fonte do Python (c).
Se você estiver interessado em implementações pitônicas da funcionalidade principal, dê uma olhada na fonte PyPy .
fonte
2 métodos,
help()
inspect
1) inspecionar:
use o módulo inpsect para explorar o código desejado ... NOTA: você pode explorar o código apenas para pacotes de módulos (aka) importados
por exemplo:
2) ajuda ():
você pode simplesmente usar o
help()
comando para obter ajuda sobre funções internas, bem como seu código.por exemplo: se você deseja ver o código para str (), basta digitar -
help(str)
retornará assim,
fonte
Um recurso bastante desconhecido é o Python Developer Guide .
Em uma edição (um pouco) recente do GH , foi adicionado um novo capítulo para abordar a pergunta que você está fazendo: Layout do código-fonte do CPython . Se algo mudar, esse recurso também será atualizado.
fonte
Conforme mencionado por @Jim, a organização do arquivo é descrita aqui . Reproduzido para facilitar a descoberta:
fonte