• 0
محمد سمير

لماذا يتم تنفيذ كود بايثون أسرع داخل الدوال

سؤال

الموضوع الأصلي:

http://stackoverflow.com/questions/11241523/why-does-python-code-run-faster-in-a-function?newsletter=1&nlcode=45886%7cb7bc

إذا حاولت تنفيذ هذا الكود:

def main():
for i in xrange(10**8):
pass
main()

ستجد ان وقت التنفيذ الحقيقي 1.841s بينما إذا حاولت تنفيذ نفس الكود خارج الدالة

for i in xrange(10**8):
pass

ستجد أن وقت التنفيذ الحقيقي: 4.543s .... لماذا؟ الإجابة البسيطة و المباشرة هي "scope of i" حيث أن المتغير i معرف داخل الدالة local بينما خارج الدالة global.

بنظرة أكثر تمعناً و باستخدام الدالة dis() و التي تسمح لك بالنظر داخل byte code للدالة التي تريدها ستجد أن المتغير i يتم تخزينه في STORE_FAST مادام داخل الدالة , أما خارجها فيتم تخزينه في STORE_NAME أو STORE_GLOBAL.

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

2 إجابة على هذا السؤال .

  • 0

Interesting ...

بالنسبة لباقي ال VMs ؟ لايوجد نفس الأمر على ال JVM او ال CLR صحيح ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لا يا أحمد لم أجد مكتبة dis على jython.. أظن أن المسألة ستختلف تماماً مع jython و ironpython لإختلاف ال byte code.

تم تعديل بواسطه محمد سمير
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .