Pergunta

Como funciona essa importação, o arquivo que ele usa?

import _functools

Em Python 2.5:

import _functools
print _functools.__file__

Dá:

Traceback (most recent call last):
  File "D:\zjm_code\mysite\zjmbooks\a.py", line 5, in <module>
    print _functools.__file__
AttributeError: 'module' object has no attribute '__file__'

Como posso obter o significado do parcial (de _functools importar parcial) se eu não conseguir ler o código C?

Foi útil?

Solução

módulos C-codificados pode ser incorporado (__file__ falta) ou ao vivo em uma biblioteca .so ou .pyd dinâmica (que sua __file__ indicará) -. Isso é um detalhe de implementação que você não deve se preocupar com

Se você quiser entender como um Python-exigível, C-codificado obras de função estudando código, aprendendo a ler C é geralmente melhor (muito menos difícil do que realmente produtiva codificação em C ;-). No entanto, muitas vezes você vai encontrar (sugestivas, não-autoritária) "amostra implementações Python" de funcionalidade C-codificado, e você pode estudar os .

Um repositório particularmente proveitosa de equivalentes Python-codificados para o Python funcionalidade biblioteca padrão que está normalmente codificados em C é o PyPy projeto (que faz implementações Python codificados em Python) - suas fontes são browseable aqui e, claro, você pode baixar e ler-los em sua máquina.

Em particular, este é PyPy do _functools.py implementação:

""" Supplies the internal functions for functools.py in the standard library """

class partial:
    """
    partial(func, *args, **keywords) - new function with partial application
    of the given arguments and keywords.
    """
    __slots__ = ['func', 'args', 'keywords']

    def __init__(self, func, *args, **keywords):
        if not callable(func):
            raise TypeError("the first argument must be callable")
        self.func = func
        self.args = args
        self.keywords = keywords

    def __call__(self, *fargs, **fkeywords):
        newkeywords = self.keywords.copy()
        newkeywords.update(fkeywords)
        return self.func(*(self.args + fargs), **newkeywords)

Pretty trivial para ler e entender, espero!

Outras dicas

Por favor, ser mais claro ao fazer perguntas próxima vez. Eu suponho que você quer este

>>> import _functools
>>> _functools.__file__
'/usr/lib/python2.6/lib-dynload/_functools.so'

É um _functools.so objeto compartilhado, escrito em C. eu acho, ele é importado pelo módulo functools real. Por que você está tentando importar com isso? Claro, é possível, no entanto, você pode muito bem from functools import partial.

Para python2.6, O módulo é uma _functools incorporado. Você pode ver que se você simplesmente digitar import _functools ; repr(_functools) e aperte enter em seu intérprete rápida.

Se você quiser ver a fonte C do módulo, veja http://hg.python.org/cpython/file/d7e85ddb1336/Modules/_functoolsmodule.c

Este módulo _functools não tem um atributo __file__ (veja o próximo parágrafo) uma vez que é compilado para o intérprete.

Para python2.5, O módulo _functools é um módulo de biblioteca padrão implementado em C e está disponível em http : //hg.python.org/cpython/file/a78381ead4cf/Modules/_functoolsmodule.c se você quiser vê-lo. Você pode ver a localização de onde o módulo é carregado por import _functools ; print _functools.__file__ digitação em seu intérprete pronta

O comportamento da função functools.partial() é descrito em PEP 309 em que foi definido. Os embora as implementações reais de built-ins são muitas vezes em C PEP de incluindo este geralmente contêm exemplo implementações em Python .

Este código de exemplo deve ser suficiente para você entender o comportamento de functools.partial(). Se há uma questão específica sobre a implementação C que é preocupante que você vai ter que ler o código C. Ou talvez descrevê-lo na sua pergunta e alguém pode saber a resposta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top