TheProgrammer نشر 29 نوفمبر 2015 أرسل تقرير نشر 29 نوفمبر 2015 هل هنالك طريقة برمجية للحصول على الشيفرة البرمجية لدالة معينة في بايثون؟ أي أريد الحصول على الشيفرة البرمجية كما كُتبت من داخل البرنامج ومن دون النظر إلى ملفاته. اقتباس
0 هشام رزق الله نشر 29 نوفمبر 2015 أرسل تقرير نشر 29 نوفمبر 2015 للحصول على الشيفرة البرمجية لدالة مكتوبة بلغة بايثون يمكنك استخدام دالة 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 Ali Haidar Ahmad نشر 2 أبريل 2022 أرسل تقرير نشر 2 أبريل 2022 هناك عدة حالات، وكل حالة لها طريقة محددة. 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. اقتباس
السؤال
TheProgrammer
هل هنالك طريقة برمجية للحصول على الشيفرة البرمجية لدالة معينة في بايثون؟ أي أريد الحصول على الشيفرة البرمجية كما كُتبت من داخل البرنامج ومن دون النظر إلى ملفاته.
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.