Pregunta

¿Cómo funciona esto importación, qué archivo utiliza?

import _functools

En Python 2.5:

import _functools
print _functools.__file__

Da:

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__'

¿Cómo puedo obtener el significado de parcial (de _functools importar parcial) si no puedo leer el código C?

¿Fue útil?

Solución

módulos codificados-C

se pueden construir-en (__file__ que carece) o viven en una librería dinámica .so .pyd (que su __file__ indicará) -. eso es un detalle de implementación que usted no debe preocuparse por

Si usted quiere entender cómo una, la función codificada-C Python se puede llamar funciona mediante el estudio de código, aprender a Leer C es generalmente mejor (mucho menos dura que en realidad productiva codificación en C ;-). Sin embargo, a menudo encontrará sugerentes, (no autorizadas) "implementaciones de Python muestra" de la funcionalidad codificado-C, y se puede estudiar los .

A especialmente fructífero repositorio de equivalentes codificados-Python a Python funcionalidad biblioteca estándar que normalmente se codifica en C es la PyPy proyecto (que hace implementaciones Python codificados en Python) - sus fuentes son browseable aquí y por supuesto se puede descargar y leer en tu máquina.

En particular, se trata de PyPy _functools.py aplicación:

""" 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 leer y entender, espero!

Otros consejos

Por favor, ser más clara cuando se hacen preguntas la próxima vez. Asumo desea que este

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

Se trata de un objeto compartido _functools.so, escrito en C supongo, que es importado por el módulo functools real. ¿Por qué estás intentando importar de ella? Claro, es posible, sin embargo, puede igual de bien from functools import partial.

Para Python2.6, El módulo _functools es una orden interna. Se puede ver que si simplemente ponemos import _functools ; repr(_functools) y pulsa enter en el indicador intérprete.

Si quieres ver la fuente del módulo C, echa un vistazo a http://hg.python.org/cpython/file/d7e85ddb1336/Modules/_functoolsmodule.c

Este módulo _functools no tiene un atributo __file__ (véase el párrafo siguiente), ya que está compilado en el intérprete.

Para python2.5, El módulo _functools es un módulo de librería estándar implementado en C y está disponible en http : //hg.python.org/cpython/file/a78381ead4cf/Modules/_functoolsmodule.c si quieres verlo. Se puede ver el lugar desde donde el módulo está cargado por import _functools ; print _functools.__file__ escribir en el indicador intérprete

El comportamiento de la función functools.partial() se describe en PEP 309 en que se ha definido. Los aunque las implementaciones reales de muebles empotrados están a menudo en C PEP de incluyendo éste contendrá usualmente ejemplos de implementaciones en Python .

Este código de ejemplo debería ser suficiente para que usted pueda entender el comportamiento de functools.partial(). Si hay un problema específico acerca de la implementación en C que es preocupante que se va a tener que leer el código C. O tal vez describirlo en su pregunta y alguien podría saber la respuesta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top