اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

للحصول على الشيفرة البرمجية لدالة مكتوبة بلغة بايثون يمكنك استخدام دالة getsourcelines من وحدة inspect حيث أنها ستُرجع لك الشيفرة البرمجية على شكل سلسلة نصية واحدة بعد أن تمرر لها اسم الدالة المطلوبة.
ملاحظة: حسب علمي إذا كانت الدالة قد تم تجميعها (compiled) من سلسلة نصية أو تم استدعاؤها من ملف تم تجميعه فإنك لن تستطيع الحصول على شيفرتها البرمجية.
عندما تكون الشيفرة البرمجية غير موجودة يمكنك استخدام دالة dis من مكتبة dis للحصول على بعض معلومات هذه الدالة كالتالي:

>>> import dis
>>> def foo(arg1,arg2):
...     #do something with args
...     a = arg1 + arg2
...     return a
...
>>> dis.dis(foo)
  3           0 LOAD_FAST                0 (arg1)
              3 LOAD_FAST                1 (arg2)
              6 BINARY_ADD
              7 STORE_FAST               2 (a)

  4          10 LOAD_FAST                2 (a)
             13 RETURN_VALUE
  • 0
نشر

هناك عدة حالات، وكل حالة لها طريقة محددة.

1. كائنات غير مضمنة Objects that are not built-in.
في هذه الحالة نستخدم الدالة getsource من الوحدة inspect. مثلاً، هنا سنعرض الكود المصدر للدالة randint من الوحدة random:

import random
import inspect
print(inspect.getsource(random.randint)) 

الخرج:

 Output:
    def randint(self, a, b):
        """Return random integer in range [a, b], including both end points.
        """

        return self.randrange(a, b+1)

إذا أردت معرفة موقع الملف الخاص بها:

print(inspect.getfile(random.randint))
# c:\Python35\lib\random.py


2. الدوال التي يتم تعريفها من المستخدم:
هنا نستخدم dill.source.getsource، حيث أن الطريقة السابقة لاتنفع هنا.

# تعريف دالة ما
def add(a, b):
   return a + b
print(add.__code__.co_filename) # Output: <stdin> 
import dill
print (dill.source.getsource(add))

الخرج:

def add(a, b):
      return a + b


3 الدوال المُضمنة في بايثون Built-in objects.
لايمكن معرفتها إلا من خلال الذهاب إلى الكود المصدر لبايثون والاطلاع عليها من هناك source.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...