Tricky Python سلسلة حرفية في تمرين المعلمة إلى timeit.timer () وظيفة

StackOverflow https://stackoverflow.com/questions/386664

  •  23-08-2019
  •  | 
  •  

سؤال

أواجه صعوبة في بيان الإعداد في Timeit.timer في Python's Timeit.timer (STMT، SETUP_STMT). أنا أقدر أي مساعدة لإخراجي من هذه المشكلة الصعبة:

لذلك يشبه Sniplet الخاص بي:

def compare(string1, string2):
    # compare 2 strings

if __name__ = '__main__':
    str1 = "This string has \n several new lines \n in the middle"
    str2 = "This string hasn't any new line, but a single quote ('), in the middle"

    t = timeit.Timer('compare(p1, p2)', "from __main__ import compare; p1=%s, p2=%s" % (str1,str2))

لا أعرف كيفية الهروب من metacharacter في المتغير Str1، Str2 دون تغيير معناها في بيان الإعداد:

"from __main__ import compare; p1=%s, p2=%s" % (str1,str2)

جربت مجموعة متنوعة مختلفة ولكن دائما ما تملك الأخطاء التالية: SyntaxError: لا يمكن تعيين حرفي
SyntaxError: EOL أثناء مسح سلسلة واحدة مقتبسة
خطأ قواعدي: بناء جملة غير صالح

هل كانت مفيدة؟

المحلول

النظر في هذا كبديل.

t = timeit.Timer('compare(p1, p2)', "from __main__ import compare; p1=%r; p2=%r" % (str1,str2))

ال %r يستخدم REPER للسلسلة، والتي يقتبس python دائما ونفئ بشكل صحيح.

تحرير: الرمز الثابت عن طريق تغيير فاصلة إلى فاصلة منقوطة؛ لقد ذهب الخطأ الآن.

نصائح أخرى

لماذا تهتم نقلا عن السلاسل على الإطلاق؟ فقط استخدمها مباشرة. بمعنى آخر. تغيير السطر الأخير إلى:

t = timeit.Timer('compare(str1, str2)', "from __main__ import compare, str1, str2")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top