Shia 1148
Shia 1148
خواندن ۶ دقیقه·۲ سال پیش

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

کتاب خانه Numpy
کتاب خانه Numpy



14 - از PyPy استفاده کنید.

پای پای و همچنین سای پای هر دو جایگزین هایی هستند برای نسخه اصلی پایتون.

سای پای از زبان C برای سریع تر کردن برنامه های پایتون کمک میگیره که انصافا هم خیلی سریع تره.

اما PyPy حدود 4 الی 5 برابر سای پای هم سریع تره.!


15- سعی کنید از بروز ترین نسخه های پایتون استفاده کنید.

پایتون در نسخه 2 از 1 خیلی بهتر شد و همچنین در نسخه 3 از 2 خیلی بهتر شد.

هر وقت که نسخه 4 اومد تعصبی رو نسخه 3 نداشته باشید و سریعا به نسخه جدیدتر کوچ کنید.

از طرفی خرده نسخه ها رو هم فراموش نکنید قطعا نسخه 3.10 از نسخه 3.2 خیلی بهتره!



منبع: کانال یوتیوب Mr Robot


یا علی...

برنامه نویسیپایتونبرنامه نویسی حرفه ایpython
چنان چه خداوند مقرر کرده: فقط حیدر امیرالمؤمنین است /ریشه واژه شیعه ۱۲ بار در قرآن آمده. ریشه واژه امام ۱۲ بار در قرآن آمده / هر کس که بیعت امام زمانش بر گردنش نباشد و بمیرد،به مرگ جاهلیت مرده است
شاید از این پست‌ها خوشتان بیاید