Question

Comment ce travail d'importation, quel fichier faut-il utiliser?

import _functools

python 2,5:

import _functools
print _functools.__file__

donne:

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

Comment puis-je obtenir le sens de partiel (de _functools importation partielle) si je ne peux pas lire le code C?

Était-ce utile?

La solution

modules C-codés peuvent être intégrés (__file__ manque) ou vivent dans une bibliothèque dynamique .so ou .pyd (qui leur __file__ indiquera) -. Qui est un détail de mise en œuvre que vous ne devriez pas se soucier de

Si vous voulez comprendre comment un code Python-appelable, la fonction C-code fonctionne en étudiant, en apprenant à lire C est généralement préférable (beaucoup moins dur que réellement productive codage en C ;-). Cependant, souvent, vous trouverez (suggestif, non faisant autorité) "exemples de mise en oeuvre de Python" de fonctionnalités codées C, et vous pouvez étudier les .

Un dépôt particulièrement fructueux d'équivalents codés python pour la fonctionnalité de la bibliothèque standard Python qui est normalement codé en C est pypy projet (qui fait implémentations python codées dans le python) - ses sources sont browseable et bien sûr, vous pouvez télécharger et les lire attentivement sur votre machine.

est de pypy En particulier, _functools.py la mise en œuvre:

""" 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)

assez trivial à lire et à comprendre, je l'espère!

Autres conseils

S'il vous plaît être plus clair quand poser des questions la prochaine fois. Je suppose que vous voulez que ce

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

Il est un objet partagé _functools.so, écrit en C. Je suppose, il est importé par le module de functools réelle. Pourquoi vous essayez d'importer de celui-ci? Bien sûr, il est possible, cependant, vous pouvez tout aussi bien from functools import partial.

Pour python2.6, Le module de _functools est une commande interne. Vous pouvez voir que si vous tapez simplement import _functools ; repr(_functools) et appuyez sur Entrée à l'invite de l'interpréteur.

Si vous voulez voir la source C du module, consultez http://hg.python.org/cpython/file/d7e85ddb1336/Modules/_functoolsmodule.c

Ce module _functools ne dispose pas d'un attribut __file__ (voir le paragraphe suivant) car il est compilé dans l'interpréteur.

Pour python2.5, Le module de _functools est un module de bibliothèque standard mis en œuvre en C et est disponible à l'adresse http : //hg.python.org/cpython/file/a78381ead4cf/Modules/_functoolsmodule.c si vous voulez le voir. Vous pouvez voir l'emplacement où le module est chargé en tapant import _functools ; print _functools.__file__ à l'invite de l'interpréteur

Le comportement de la fonction de functools.partial() est décrit dans PEP 309 dont il a été défini. Les bien que celui-ci les contiennent généralement des implémentations réelles de built-ins sont souvent en C PEP y compris de mises en œuvre par exemple en Python .

Ce code exemple devrait être suffisant pour vous de comprendre le comportement de functools.partial(). S'il y a un problème spécifique au sujet de la mise en œuvre de C qui vous préoccupe allez devoir lire le code C. Ou peut-être décrire dans votre question et quelqu'un pourrait connaître la réponse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top