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?
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.