سؤال
كيف يعمل هذا الاستيراد، ما هو الملف الذي يستخدمه؟
import _functools
في بيثون 2.5:
import _functools
print _functools.__file__
يعطي
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__'
كيف يمكنني الحصول على معنى جزئي (من _functools استيراد جزئي) إذا لم أتمكن من قراءة رمز C؟
المحلول
وحدات C-COMED يمكن أن تكون مدمجة (تفتقر __file__
) أو العيش في .so
أو .pyd
مكتبة ديناميكية (التي __file__
سوف تشير) - هذا تفاصيل تنفيذ يجب أن تهتم به.
إذا كنت ترغب في فهم كيفية عمل وظيفة مشفرة من Python-Cladable، C-Costed عن طريق دراسة التعليمات البرمجية، وتعلم اقرأ C هو الأفضل بشكل عام (أقل بكثير من الصعب في الواقع ترميز في ج ؛-). ومع ذلك، في كثير من الأحيان ستجد (موثوقية، غير موثوقية) "تطبيقات Python Python" من الوظائف المشفرة C، ويمكنك الدراسة أولئك.
مستودع مثمر بشكل خاص لمكافئات Python-CODED إلى وظيفة مكتبة Python القياسية التي يتم ترميزها عادة في C هي بايبيت المشروع (الذي يقوم بتنفيذ Python مشفرة في بيثون) - مصادره صالحة للتصفح هنا وبالطبع يمكنك تنزيلها ووضعها على جهازك.
على وجه الخصوص، هذا هو البكي _functools.py. تطبيق:
""" 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)
تافهة جميلة لقراءة وفهم، آمل!
نصائح أخرى
يرجى أن تكون أكثر وضوحا عند طرح الأسئلة في المرة القادمة. أفترض أنك تريد هذا
>>> import _functools
>>> _functools.__file__
'/usr/lib/python2.6/lib-dynload/_functools.so'
إنه كائن مشترك _functools.so
, ، مكتوبة في C. أعتقد، يتم استيرادها من قبل الفعلي functools
وحدة. لماذا تحاول استيراد منه؟ بالتأكيد، من الممكن، ومع ذلك، يمكنك أيضا from functools import partial
.
ل python2.6، _functools
الوحدة هي مدمجة. يمكنك أن ترى أنه إذا كنت ببساطة الكتابة import _functools ; repr(_functools)
واضغط على Enter في موجه المترجم الخاص بك.
إذا كنت ترغب في معرفة مصدر C للوحدة، تحقق من http://hg.python.org/cpython/file/d7e85ddb1336/modules/_functolsmodule.c.c.
هذه _functools
الوحدة لا تملك __file__
السمة (انظر الفقرة التالية) منذ تجميعها في المترجم.
ل python2.5، _functools
الوحدة النمطية هي وحدة مكتبة قياسية مطبقة في C والمتاحة في http://hg.python.org/cpython/file/a78381ead4cf/modules/_functolsmodule.c.c. إذا كنت تريد أن ترى ذلك. يمكنك رؤية الموقع من حيث يتم تحميل الوحدة النمطية عن طريق الكتابة import _functools ; print _functools.__file__
في موجه المترجم الخاص بك
سلوك functools.partial()
تم وصف الوظيفة في بيب 309. الذي تم تحديده. على الرغم من أن التطبيقات الفعلية للمؤسسات المدمجة هي في كثير من الأحيان في C PEP بما في ذلك هذا واحد عادة ما يحتوي مثال التطبيقات في بيثون.
يجب أن يكون رمز المثال هذا كافيا لفهم سلوك functools.partial()
. وبعد إذا كانت هناك مشكلة محددة حول تنفيذ C، فإنك سيتعين عليك قراءة رمز C. أو ربما تصفها في سؤالك وقد يعرف شخص ما الإجابة.