سؤال

كيف يعمل هذا الاستيراد، ما هو الملف الذي يستخدمه؟

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. أو ربما تصفها في سؤالك وقد يعرف شخص ما الإجابة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top