بايثون العرب
10.5K subscribers
866 photos
183 videos
768 links
Download Telegram
🚀 تحسين سرعة الدوال في بايثون باستخدام `lru_cache`

هل تعاني من بطء بعض الدوال التي تستدعيها مراراً وتكراراً بنفس المدخلات؟ دعنا نكتشف كيف يمكن لـ `lru_cache` تسريعها!

from functools import lru_cache
import time

@lru_cache(maxsize=None)
def slow_function(n):
"""دالة بطيئة تحاكي عملية مكلفة."""
time.sleep(1) # محاكاة عملية تستغرق وقتاً
return n * 2

# الاستدعاء الأول (سيستغرق وقتاً)
start_time = time.time()
result1 = slow_function(5)
end_time = time.time()
print(f"الاستدعاء الأول: {result1}, الوقت المستغرق: {end_time - start_time:.2f} ثانية")

# الاستدعاء الثاني بنفس المدخلات (سيكون سريعاً جداً)
start_time = time.time()
result2 = slow_function(5)
end_time = time.time()
print(f"الاستدعاء الثاني: {result2}, الوقت المستغرق: {end_time - start_time:.2f} ثانية")

# استدعاء بمدخلات مختلفة (سيستغرق وقتاً مجدداً)
start_time = time.time()
result3 = slow_function(10)
end_time = time.time()
print(f"الاستدعاء الثالث: {result3}, الوقت المستغرق: {end_time - start_time:.2f} ثانية")


الديكور `@lru_cache(maxsize=None)` يقوم بتخزين نتائج استدعاءات الدالة. عندما تُستدعى الدالة مرة أخرى بنفس المدخلات، يتم إرجاع النتيجة المخزنة مباشرة بدلاً من إعادة حسابها، مما يؤدي إلى تسريع كبير في الأداء، خاصة للدوال التي تتطلب عمليات حسابية معقدة أو مكلفة.

['#بايثون', '#برمجة', '#تحسين_الأداء', '#lru_cache', '#PythonTips', '#Coding']
💡 تحسين أداء Python باستخدام List Comprehensions! 🚀

هل تريد كتابة كود Python أكثر إيجازًا وكفاءة؟ تعلم كيف يمكن لـ List Comprehensions تبسيط عمليات إنشاء القوائم!

numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers]
print(squares)


بدلاً من كتابة حلقة for تقليدية لإنشاء قائمة جديدة، تسمح لك List Comprehensions بإنشاء قوائم جديدة بطريقة موجزة وواضحة. في هذا المثال، أنشأنا قائمة `squares` عن طريق تربيع كل عنصر في قائمة `numbers`.

['#Python', '#برمجة', '#ListComprehensions', '#كود', '#تعلم_البرمجة', '#PythonTips']
💡 نصيحة بايثون سريعة: فك ضغط القوائم بكفاءة! 🐍

هل سئمت من كتابة حلقات متكررة لفك ضغط القوائم؟ إليك طريقة بايثون المختصرة والفعالة باستخدام `*`!

my_list = [1, 2, 3]
new_list = [*my_list, 4, 5]
print(new_list)


المعامل `*` (النجمة) يُستخدم لفك ضغط عناصر القائمة (أو أي iterable آخر) مباشرة داخل قائمة جديدة. هذا يجعل الكود أقصر وأكثر قابلية للقراءة.

['#بايثون', '#برمجة', '#نصائح_برمجية', '#PythonTips', '#ListUnpacking']
❤1
🚀 تسريع دوال Python باستخدام List Comprehensions!

هل سئمت من الحلقات التكرارية البطيئة في Python؟ اكتشف كيف تجعل الكود الخاص بك أسرع وأكثر أناقة باستخدام List Comprehensions!

numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers]
print(squares)


List Comprehensions توفر طريقة موجزة وفعالة لإنشاء القوائم. في هذا المثال، قمنا بإنشاء قائمة جديدة 'squares' تحتوي على مربعات كل رقم في القائمة الأصلية 'numbers' في سطر واحد فقط، مما يجعل الكود أسرع وأسهل في القراءة مقارنة باستخدام حلقة for تقليدية.

['#Python', '#برمجة', '#ListComprehensions', '#PythonTips', '#تطوير']
🐍 تحسين أداء Python باستخدام List Comprehensions ✨

هل تبحث عن طريقة لكتابة كود Python أكثر إيجازًا وكفاءة؟ تعلم كيف يمكن لـ List Comprehensions أن تحدث فرقًا كبيرًا!

numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers]
print(squares)

# مقارنة مع الطريقة التقليدية:
squares_loop = []
for x in numbers:
squares_loop.append(x**2)
print(squares_loop)


List Comprehensions توفر طريقة موجزة لإنشاء قوائم. الكود أعلاه يوضح كيف يمكننا حساب مربعات الأرقام في قائمة 'numbers' باستخدام List Comprehension واحدة، مما يجعل الكود أقصر وأكثر قابلية للقراءة مقارنة باستخدام حلقة 'for' التقليدية.

['#Python', '#برمجة', '#ListComprehensions', '#كود', '#تطوير', '#نصائح_برمجية', '#PythonTips']
✨ تحسين سرعة استيراد الوحدات في بايثون 🚀

هل تعاني من بطء في تشغيل برامج بايثون بسبب استيراد العديد من الوحدات؟ هناك طريقة سريعة لتحسين ذلك!

import sys

# قم بتسجيل المسار لمرة واحدة
if 'my_module' not in sys.modules:
import my_module

# الآن يمكنك استخدام my_module بأمان وسرعة
my_module.do_something()


عندما تستورد وحدة لأول مرة، يقوم بايثون بتحميلها وتخزينها في `sys.modules`. في المرات اللاحقة، يتم استرجاع الوحدة من الذاكرة مباشرة، مما يسرع عملية الاستيراد بشكل كبير. هذا الكود يتحقق مما إذا كانت الوحدة موجودة بالفعل في `sys.modules` قبل محاولة استيرادها.

['#بايثون', '#برمجة', '#تطوير', '#تحسين_الأداء', '#PythonTips']
💡 نصيحة بايثون سريعة: التعامل مع الأخطاء بذكاء! 🐍

هل سئمت من توقف برنامجك عند حدوث خطأ؟ تعلم كيف تتعامل مع الاستثناءات (Exceptions) في بايثون لتجعل كودك أكثر قوة ومرونة.

try:
result = 10 / 0
except ZeroDivisionError:
print("لا يمكن القسمة على صفر!")
finally:
print("تم الانتهاء من محاولة العملية.")


استخدم كتلة `try` لتضمين الكود الذي قد يسبب خطأ. إذا حدث خطأ من نوع `ZeroDivisionError` (القسمة على صفر)، سيتم تنفيذ كتلة `except`. كتلة `finally` تُنفذ دائمًا، سواء حدث خطأ أم لا.

['#بايثون', '#برمجة', '#تعليم', '#تطوير', '#نصائح_برمجية', '#Exceptions', '#PythonTips']
💡 نصائح بايثون: استخدام `enumerate` لسهولة الوصول للفهرس والقيمة 💡

هل سئمت من تتبع الفهرس يدويًا في حلقات التكرار؟ `enumerate` هي الحل الأمثل لجعل الكود الخاص بك أكثر وضوحًا وكفاءة!

my_list = ['تفاحة', 'موزة', 'كرز']

for index, value in enumerate(my_list):
print(f'الفهرس: {index}, القيمة: {value}')


الدالة `enumerate()` تأخذ أي كائن قابل للتكرار (مثل القائمة) وتعيد كائن `enumerate` الذي ينتج أزواجًا تحتوي على الفهرس والقيمة لكل عنصر في الكائن الأصلي. هذا يغنينا عن الحاجة إلى متغير عداد منفصل.

['#بايثون', '#برمجة', '#نصائح_بايثون', '#enumerate', '#PythonTips', '#Coding']
✨ تحسين أداء Python: استخدام `enumerate` بكفاءة ✨

هل سئمت من كتابة عدادات يدوية في حلقات Python؟ إليك طريقة أنيقة ومُحسّنة لاستخدام `enumerate`!

my_list = ['تفاحة', 'موز', 'كرز']

for index, value in enumerate(my_list):
print(f"العنصر في الفهرس {index} هو: {value}")

# يمكنك أيضًا تحديد فهرس بداية مختلف
for index, value in enumerate(my_list, start=1):
print(f"العنصر رقم {index} هو: {value}")


الدالة `enumerate()` في Python تسمح لك بالمرور على قائمة (أو أي كائن قابل للتكرار) والحصول على كل من الفهرس والقيمة في كل تكرار. هذا يجعل الكود أكثر وضوحًا ويقلل من الحاجة إلى متغيرات عداد إضافية. يمكنك أيضًا تحديد قيمة بداية للفهرس باستخدام الوسيط `start`.

['#Python', '#برمجة', '#تعلم_البرمجة', '#enumerate', '#نصائح_برمجية', '#PythonTips']
💡 تحسين أداء Python باستخدام List Comprehensions!

هل تريد كتابة كود Python أكثر إيجازًا وسرعة؟ تعرف على قوة List Comprehensions وكيف يمكن أن تحدث فرقًا كبيرًا في برمجتك!

numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers]
print(squares)

# بدون List Comprehensions:
# squares_old = []
# for x in numbers:
# squares_old.append(x**2)
# print(squares_old)


List Comprehensions توفر طريقة مختصرة لإنشاء القوائم. بدلاً من استخدام حلقة `for` تقليدية، يمكنك تعريف القائمة الجديدة في سطر واحد، مما يجعل الكود أسهل للقراءة وأكثر كفاءة.

['#Python', '#برمجة', '#ListComprehensions', '#تطوير', '#تعلم_البرمجة', '#PythonTips']
تلميحة بايثون سريعة! 💡

هل تعلم كيف تجعل طباعة النصوص والمتغيرات أسهل وأكثر أناقة في بايثون؟ إليك طريقة استخدام f-strings (formatted string literals) التي ستغير طريقة تعاملك مع السلاسل النصية!

name = "سارة"
age = 28
language = "بايثون"

# استخدام f-string لتضمين المتغيرات مباشرة
message = f"مرحباً، اسمي {name}، عمري {age} عاماً، وأحب برمجة {language}."

print(message)


تسمح لك f-strings بتضمين تعبيرات بايثون (مثل المتغيرات) مباشرة داخل سلاسل نصية عن طريق وضع حرف 'f' أو 'F' قبل علامات الاقتباس. هذا يجعل الكود أكثر وضوحاً، قراءةً، وأسهل في الصيانة مقارنةً بالطرق التقليدية مثل .format() أو علامة %. كما أنها أسرع في التنفيذ!

['#بايثون', '#تلميحات_برمجية', '#f_strings', '#PythonTips', '#تعلم_بايثون', '#برمجة']
تنسيق النصوص بمرونة باستخدام f-strings! ✨

اكتشف كيف يمكنك جعل تنسيق النصوص في بايثون أسهل وأكثر قراءة باستخدام f-strings القوية.

name = "أحمد"
age = 30
city = "الرياض"

# Using f-string for easy formatting
message = f"مرحباً، اسمي {name} وعمري {age} سنة. أعيش في {city}."
print(message)

# You can also include expressions and format them
price = 19.99
quantity = 3
total = f"السعر الإجمالي: {price * quantity:.2f} ريال."
print(total)


تتيح لك f-strings تضمين التعبيرات والمتغيرات مباشرة داخل السلاسل النصية باستخدام الأقواس المعقوفة {}، مما يجعل الكود أكثر وضوحاً واختصاراً. كما يمكنك تطبيق التنسيقات مباشرة داخل الأقواس.

['#بايثون', '#تعلم_بايثون', '#برمجة', '#نصائح_برمجية', '#fstrings', '#PythonTips']
تنسيق السلاسل النصية بـ f-strings في بايثون! 💡

تعلم كيف تجعل تنسيق السلاسل النصية أسهل وأكثر قابلية للقراءة باستخدام f-strings في بايثون. إنها طريقة قوية وفعالة لتضمين المتغيرات والتعبيرات مباشرة في سلاسلك النصية.

name = "أحمد"
age = 30
city = "الرياض"

# استخدام f-string لتنسيق سهل
greeting = f"مرحباً، اسمي {name} وعمري {age} سنة. أنا أعيش في {city}."
print(greeting)

# يمكن لـ f-strings أيضاً تقييم التعبيرات
price = 19.99
quantity = 3
total_cost = f"التكلفة الإجمالية: ${price * quantity:.2f}"
print(total_cost)


تعتبر f-strings (formatted string literals) في بايثون طريقة حديثة وقوية لتضمين التعبيرات داخل السلاسل النصية. تبدأ السلسلة بالحرف 'f' أو 'F'، ويمكنك وضع المتغيرات أو التعبيرات داخل أقواس متعرجة {} مباشرة داخل السلسلة. هذا يجعل الكود أكثر وضوحاً وسهولة في القراءة مقارنة بالطرق القديمة، كما يتيح لك تنسيق الأرقام بسهولة.

['#بايثون', '#برمجة', '#نصائح_برمجية', '#fstrings', '#تعلم_بايثون', '#PythonTips']
💡 نصيحة بايثون: استخدام f-strings للطباعة السهلة! 🐍

هل سئمت من كتابة سلاسل نصية معقدة في بايثون؟ إليك طريقة أسهل وأكثر أناقة باستخدام f-strings!

name = "علي"
age = 30
print(f"اسمي هو {name} وعمري {age} سنة.")


f-strings (formatted string literals) تسمح لك بتضمين تعبيرات بايثون مباشرة داخل السلاسل النصية عن طريق وضع حرف 'f' قبل علامة التنصيص. هذا يجعل الكود أكثر قابلية للقراءة ويقلل من الأخطاء.

['#بايثون', '#برمجة', '#نصائح_برمجية', '#fstrings', '#PythonTips']
🚀 تحسين أداء Python: استخدام `enumerate` بكفاءة!

هل سئمت من كتابة عدادات يدوية في حلقات Python؟ دعنا نكتشف كيف يمكن لدالة `enumerate` أن تجعل كودك أنظف وأكثر كفاءة!

my_list = ['تفاحة', 'موزة', 'كرز']

for index, value in enumerate(my_list):
print(f"العنصر رقم {index}: {value}")

# يمكنك تحديد قيمة بداية للعداد
for index, value in enumerate(my_list, start=1):
print(f"العنصر رقم {index}: {value}")


تسمح لك دالة `enumerate` بالحصول على كل من الفهرس (index) والقيمة (value) لكل عنصر أثناء المرور على قائمة أو أي كائن قابل للتكرار. هذا يلغي الحاجة إلى تتبع الفهرس يدويًا، مما يجعل الكود أكثر قابلية للقراءة. يمكنك أيضًا تحديد قيمة بداية للعداد باستخدام المعامل `start`.

['#Python', '#برمجة', '#تعلم_البرمجة', '#PythonTips', '#enumerate', '#كود_نظيف']
🚀 تحسين أداء Python: استخدام `__slots__`

هل تعاني من استهلاك ذاكرة كبير في كائنات Python؟ اكتشف كيف يمكن لـ `__slots__` أن يساعدك في تحسين الأداء وتقليل استهلاك الذاكرة بشكل كبير!

class Point:
__slots__ = ('x', 'y')

def __init__(self, x, y):
self.x = x
self.y = y

# بدون __slots__
class PointWithoutSlots:
def __init__(self, x, y):
self.x = x
self.y = y

import sys

# مقارنة حجم الذاكرة
point1 = Point(1, 2)
point2 = PointWithoutSlots(1, 2)

print(f'حجم الذاكرة لكائن Point (مع __slots__): {sys.getsizeof(point1)} بايت')
print(f'حجم الذاكرة لكائن PointWithoutSlots (بدون __slots__): {sys.getsizeof(point2)} بايت')


عندما تنشئ كائنًا في Python بدون `__slots__`، يقوم Python بإنشاء قاموس (`__dict__`) لتخزين سمات الكائن. هذا يوفر مرونة ولكنه يستهلك ذاكرة إضافية. بتعريف `__slots__`، أنت تخبر Python بتخصيص مساحة ثابتة لكل سمة محددة، مما يلغي الحاجة إلى `__dict__` ويقلل بشكل كبير من استهلاك الذاكرة، خاصة عند إنشاء عدد كبير من الكائنات. لاحظ أن استخدام `__slots__` يمنع إضافة سمات جديدة ديناميكيًا بعد الإنشاء.

['#Python', '#برمجة', '#تحسين_الأداء', '#تطوير_البرمجيات', '#PythonTips', '#علم_البيانات', '#Backend']
✨ تحسين سرعة استدعاء الدوال في بايثون باستخدام @lru_cache

هل تعاني من بطء في استدعاء دوال معينة تتكرر فيها نفس العمليات؟ الحل بسيط مع Decorator مميز في بايثون!

from functools import lru_cache

@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(10))
print(fibonacci(30))


الـ @lru_cache هو Decorator يقوم بتخزين نتائج استدعاءات الدالة. في المرة القادمة التي يتم فيها استدعاء الدالة بنفس المدخلات، يتم إرجاع النتيجة المخزنة مباشرة بدلاً من إعادة حسابها، مما يوفر الكثير من الوقت خاصة مع الدوال التكرارية أو التي تتطلب عمليات حسابية معقدة.

['#بايثون', '#برمجة', '#تطوير', '#تحسين_الأداء', '#lru_cache', '#PythonTips']
💡 نصيحة بايثون: استخدام `enumerate` لترقيم القوائم بسهولة! 🚀

هل سئمت من كتابة عدادات يدوية عند المرور على عناصر قائمة في بايثون؟ جرب `enumerate`!

my_list = ['تفاحة', 'موزة', 'كرز']
for index, value in enumerate(my_list):
print(f'العنصر رقم {index}: {value}')


الدالة `enumerate()` تأخذ قائمة (أو أي كائن قابل للتكرار) وتعيد زوجًا من (الفهرس، القيمة) لكل عنصر. هذا يجعل الكود أنظف وأكثر قابلية للقراءة.

['#بايثون', '#برمجة', '#نصائح_بايثون', '#enumerate', '#PythonTips']
💡 استخدم enumerate في بايثون بكفاءة! 💡

هل سئمت من كتابة عدادات يدوية عند المرور على قوائم بايثون؟ إليك طريقة أسهل وأكثر أناقة!

my_list = ['تفاحة', 'موز', 'كرز']

for index, value in enumerate(my_list):
print(f"العنصر رقم {index}: {value}")


الدالة `enumerate()` تسمح لك بالحصول على كل من الفهرس (index) والقيمة (value) للعنصر أثناء المرور على أي تسلسل (مثل القوائم أو السلاسل النصية) في حلقة `for`. هذا يجعل الكود أقصر وأكثر قابلية للقراءة.

['#بايثون', '#برمجة', '#enumerate', '#نصائح_برمجة', '#PythonTips']
🐍 تحسين أداء Python: دليل سريع للمبتدئين

هل تريد جعل أكواد Python الخاصة بك أسرع وأكثر كفاءة؟ إليك بعض النصائح الأساسية التي ستساعدك على البدء!

def sum_list_naive(numbers):
total = 0
for num in numbers:
total += num
return total

import timeit

my_list = list(range(1000000))

time_naive = timeit.timeit(lambda: sum_list_naive(my_list), number=100)

print(f"الوقت المستغرق للطريقة البسيطة: {time_naive:.6f} ثانية")

def sum_list_optimized(numbers):
return sum(numbers)

time_optimized = timeit.timeit(lambda: sum_list_optimized(my_list), number=100)

print(f"الوقت المستغرق للطريقة المحسنة: {time_optimized:.6f} ثانية")


في هذا المثال، نقارن بين طريقة يدوية لجمع عناصر قائمة وطريقة استخدام الدالة المدمجة `sum()`. كما ترى، الدالة المدمجة أسرع بكثير لأنها مكتوبة بلغة C ومُحسّنة للغاية. القاعدة العامة: استخدم الدوال المدمجة والمكتبات القياسية كلما أمكن ذلك لضمان أفضل أداء.

['#Python', '#برمجة', '#تطوير', '#تعلم_البرمجة', '#PythonTips', '#Performance']