الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه محمد سمير في 4 يوليو 2012 · 2 رد · 892 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

سبحانك اللهم و بحمدك ، أشهد أن لا إله إلا أنت ، أستغفرك ربي و أتوب إليك

مدونتي

http://www.facebook.com/brmjt

#2

Interesting ...

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

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#3

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

تم تعديل هذه المشاركة بواسطة محمد سمير في 5 يوليو 2012 في 17:56

1

سبحانك اللهم و بحمدك ، أشهد أن لا إله إلا أنت ، أستغفرك ربي و أتوب إليك

مدونتي

http://www.facebook.com/brmjt

مواضيع مشابهة