سؤال

أعتذر عن إعادة نشر ولكن اضطررت إلى تحرير هذا السؤال عندما حصلت على العمل و أدركت أنني بحاجة إلى أن يكون لديك حساب على القيام بذلك.حتى هنا يذهب مرة أخرى (مع قليل من السياق).

أنا أحاول أن الوقت متى السيناريو يأخذ لتنفيذ وأنا أفكر في القيام بذلك عن طريق التحقق من الوقت المنقضي بعد كل سطر من التعليمات البرمجية يتم تنفيذها.لقد فعلت هذا من قبل عندما يحتوي البرنامج النصي الواردة طريقة التعاريف ولكن لست متأكدا كيف سيكون العمل في هذه الحالة.

لذا سؤالي هو:هل هناك طريقة لاستخدام setTrace() وظيفة في السيناريو الذي لا يوجد لديه طريقة التعاريف ؟ أي

for i in range(1, 100):
    print i

def traceit(frame, event, arg):
    if event == "line":
        lineno = frame.f_lineno
        print "line", lineno

    return traceit

sys.settrace(traceit)
هل كانت مفيدة؟

المحلول

لا ، مستندات يقول: "تتبع الدالة استدعاء (مع الحدث مجموعة 'دعوة') كلما محلية جديدة نطاق دخلت" -- إذا كنت لم أدخل النطاق المحلي (فقط تنفيذ في النطاق العالمي) ، وظيفة التتبع سوف أبدا أن يسمى.علما بأن settrace جدا الغازية على أي حال لغرض توقيت "متى السيناريو يأخذ لتنفيذ" كما أنه سوف يغير ما هو قياس كثيرا ؛ إذا ما تقوله هو في الواقع ما كنت تريد فقط تأخذ من الوقت في بداية التنفيذ و التسجيل atexit وظيفة أن يحصل على الوقت مرة أخرى وطباعة الفرق.إذا كان ما تريده هو مختلف ، أي ، التنميط, انظر cProfile .

كذلك لاحظ أن التعليمات البرمجية المثال تعطي لا يمكن أن تفعل أي شيء مفيد (على الرغم من أنني قد تحريره لإصلاح indent خطأ):أول الحلقات ، ثم defs وظيفة ، وأخيرا يدعو settrace...ثم ينتهي فورا لأنه ليس هناك المزيد من التعليمات البرمجية بعد ذلك!إذا كنت تريد أن يحدث أي شيء قبل أن بداية حلقة وتريد أن يكون كل شيء في وحدة أعلى مستوى (فكرة سيئة, ولكن أيا كان) ، عليك أن تضع "كل شيء" بشكل معجمي قبل حلقة ، ليس بعد...;-)

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