15 روش کارآمد برای افزایش سرعت پایتون!

بسم الله الرحمن الرحیمسلام. زبان برنامه نویسی پایتونقبل از شروع بحث اصلی لازم می دونم که که خیلی سریع دسته بندی زبان های برنامه نویسی رو از نظر نوع خوانش کد بررسی کنیم:زبان های برنامه نویسی به 2 دسته تقسیم می شن: زبان های کامپیلری - زبان های مفسریزبان های کامپایلری در واقع زبان هایی هستن که یک بار کل کد ها رو ترجمه می کنن (که کامپیوتر خیلی راخت بتونه اون ها رو بخونه) و بعد از روی کد ها ترجمه شده برنامه اجرا میشه.اما زبان هایی مفسری زبان هایی هستن که کد های اونا خط به خط ترجمه و تفسیر میشه برای کامپیوتر به همین دلیل میزان ram بالاتری نسبت به کامپایلری ها مصرف می کنن و خود این موضوع دلیلی هست بر سرعت پایین تر زبان های مفسری نسبت به زبان های کامپایلریالبته این رو هم در نظر بگیرید که از مزیت های زبان های مفسری اینه که معمولا به زبان انسان نزدیک تره تا زبان کامپیوتر , همچنین وابسته به نوع سخت افزار نیست :)از زیبایی های علمحال که زبان های برنامه نویسی رو از نظر نوع خوانش کد خیلی سریع بررسی کردیم، احتمالا متوجه شدید چرا زبان برنامه نویسی پایتون از زبان هایی مثل ++C، C و... کمتره. :(سرعت کمتر پایتون همیشه به خاطر ساختار خود زبان نیست. بلکه برخی مواقع این ما برنامه نویس ها هستیم که با کد نویسی غیر حرفه ای مون باعث میشیم سرعت برنامه پایین بیاد و آخرش هم تقصیر رو هم میندازیم گردن اون زبان بیچاره :|در این نوشته به تحقیق کانال یوتیوب Mr. Robot به این می پردازیم که چجور حرفه ای کد بزنیم تا سرعت برنامه هایی که با پایتون می نویسم بالاتر بره!طبیعت واقعا زیبا خداوند...1- استفاده از Tuple به جای Listاگه نوع برنامه و پروژه ای که درگیرش هستیم نیازی به ویرایش نداره (چون در Tuple ها نمیشه ویرایش کرد)، بهتره به جای List از Tuple استفاده کنیم.نوع داده Tuple سریع تر از نوع داده List است.2- استفاده از حلقه while به جای حلقه forنوع حلقه for به خاطر ساختار dynamic و پویایی که داره باعص میشه وقت بیشتری برای اجرای اون صرف بشه بنابراین تا میتونید به جای for از حلقه while استفاده کنید.3- استفاده از List Comprehension هاA = [1, 2, 3, 4, 5] z = [] for number in A: z.append(number) print(z) # [1, 2, 3, 4, 5]می توانیم به سادگی هر چه تمام تر کد بالا را با کد زیر جایگزین کنیم:A = [1, 2, 3, 4, 5] z = [number for number in A] print(z) # [1, 2, 3, 4, 5]4- متغیر های نزدیک به هم را در یک خط تعریف کنیمa = &quotHello&quot b = 23 c = True d = 5j e = [&quotReza&quot, &quotHooman&quot, &quotAli&quot]می توانیم کد بالا را با کد پایین جایگزین کنیم:a, b, c, d, e = &quotHello&quot, 23, True, 5j, [&quotReza&quot, &quotHooman&quot]5- حتی المقدور از متغیر های global استفاده نکنیدمتغیر های global زمانی زیادی را برای شناخته شدن صرف می کنن بنابراین حتی المقدور از اون ها استفاده نکنید.اگه دوست دارید بیشتر درباره Global Variables بدونید، اینجا کلیک کنید.6- از کتاب خانه ها استفاده کنیدیکی از قدرت ها پایتون، کتاب خونه های اون هستن!کتاب خونه ها برای راحت تر کد نوشتن ساخته شدن و دلیلی نداره از اون ها استفاده نکنید!به عنوان مثال اگر می خواهید جذر یه عدد رو بگیرید، لزومی نداره خودتون تابع جذر بنویسید بلکه می تونید خیلی خیلی راحت با استفاده از math به تابع sqrt دسترسی پیدا کنید.7- حرفه ای از کتاب خونه ها استفاده کنیدبه عنوان مثال اگه می خواهید از sqrt استفاده کنید؛ این نوع import کردن کتاب خونه بدترین شکل ممکنه!import math print(math.sqrt(16))این حالت خیلی بده چون هر وقت می خواهید که از sqrt درون کتاب خونه math استفاده کنید، به طور خودکار تمام توابع درون کتاب خونه پردازش میشه و بعد برای شما sqrt رو اعمال می کنه.اما شکل حرفه ای اون این جوریه:from math import sqrt print(sqrt(16))اینجوری فقط تابع sqrt درون math پردازش میشه. همین...8- به جای + از join برای تلفیق رشته ها استفاده کنیدعملگر + یک رشته جدید می سازه و سپس دو رشته قبل و بعد از خودش رد به اون منتقل می کنهMyInfo = {&quotname&quot : &quotReza&quot, &quotsurname&quot : &quotAmraei&quot} print(MyInfo[&quotname&quot] + MyInfo[&quotsurname&quot]) # RezaAmraeiاما متد join صرفا دو رشته رو به هم می چسبونه و رشته جدیدی خلق نمی کنهاون رشته های که join بهش می چسبه حکم جدا کننده یا seperator رو دارهMyInfo = {&quotname&quot : &quotReza&quot, &quotsurname&quot : &quotAmraei&quot} print(&quot &quot.join(MyInfo.values())) # Reza Amraeiدر مثال بالا رشته خالی " " حکم جدا کننده میون اعضای دیکشنری رو دارهعلاوه بر دیکشنری، می تونید از متد join در لیست و تاپل سِت هم استفاده کنید.9- تبدیل لیست به سِت و دوباره سِت به لیست زمان زیادی می بره.! گاهی پیش میاد که می خواهیم اعضای تکراری یک لیست رو حذف کنیم و به این نتیجه می رسیم که لیست رو به سِت (چون در سِت ها اعضای تکراری خودکار حذف میشن) و بعد دوباره از سِت به لیست تبدیل کنیم.خوب این کار زمان زیادی میبره :(10- استفاده از while 1 به جای while True در حلقه های بی نهایتهر دو عبارت while 1 و همچینن while True یک معنی یکسان دارند اما برا کامپیوتر با توجه نوع پردازش اون، while 1 زمان کمتری می بره.11- استفاده از شرط های تو در تو ممنوع!!!گاهی پیش میاد که می خواهیم اگه دو تا شرط (یا بیشتر) برقرار بود، برنامه فلان کار رو انجام بده.نوع نوشتن کند ترش اینجوری میشه:a = 12 b = 7 if a > 10: if b < 10: print(&quotOK&quot)اما برای سریع تر کردن برنامه، باید هر دو شرط در یک خط باشن:a = 12 b = 7 if a > 10 and b < 10: print(&quotOK&quot)12- به جای توابع def از توابع lambda استفاده کنید.اصل حکمت توابع lambda در پایتون به خاطر سرعت بیشتر اون هاست. این توابع کار های دم دستی تر و راحت تر def رو انجام میدن.13- از کتاب خونه هایی که با زبان های دیگه نوشتن شدن استفاده کنید.همون طور که اول نوشته هم گفتیم، زبان های کامپایلری بالاخص ++C و C از سرعت بسیار بالایی برخوردار هستن.کتاب خونه هایی که به این زبان ها نوشته میشن هم به نسبت از سرعت بالاتری برخوردار هستن نسبت به کتاب خونه هایی که به زبان پایتون نوشته شدن.از این دست کتاب خونه ها میشه به این موارد اشاره کرد: Numpy - Scipy - Pandasکتاب خانه Numpy14 - از PyPy استفاده کنید.پای پای و همچنین سای پای هر دو جایگزین هایی هستند برای نسخه اصلی پایتون.سای پای از زبان C برای سریع تر کردن برنامه های پایتون کمک میگیره که انصافا هم خیلی سریع تره.اما PyPy حدود 4 الی 5 برابر سای پای هم سریع تره.!15- سعی کنید از بروز ترین نسخه های پایتون استفاده کنید.پایتون در نسخه 2 از 1 خیلی بهتر شد و همچنین در نسخه 3 از 2 خیلی بهتر شد.هر وقت که نسخه 4 اومد تعصبی رو نسخه 3 نداشته باشید و سریعا به نسخه جدیدتر کوچ کنید.از طرفی خرده نسخه ها رو هم فراموش نکنید قطعا نسخه 3.10 از نسخه 3.2 خیلی بهتره!منبع: کانال یوتیوب Mr Robotیا علی...