بايثون العرب
10.5K subscribers
867 photos
183 videos
768 links
Download Telegram
💡 تحسين أداء Python باستخدام Decorators 🚀

تعلم كيف تجعل دوالك أكثر كفاءة وقابلية للقراءة باستخدام Decorators في Python.

def timer(func):
import time
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"الدالة {func.__name__} استغرقت {end_time - start_time:.4f} ثانية")
return result
return wrapper

@timer
def slow_function():
import time
time.sleep(2)
print("الوظيفة البطيئة اكتملت!")

slow_function()


الـ Decorator هو نمط تصميم يسمح لك بإضافة وظائف جديدة إلى دالة موجودة مسبقاً دون تعديل هيكلها. في هذا المثال، الـ decorator `timer` يقيس وقت تنفيذ الدالة المزينة به `@timer`.

['#Python', '#Programming', '#Coding', '#Decorators', '#PythonTips', '#LearnToCode', '#SoftwareDevelopment']
💡 تعلم اختصارات بايثون المفيدة! 🐍

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

numbers = [1, 2, 3, 4, 5]

# الطريقة التقليدية
squares_traditional = []
for num in numbers:
squares_traditional.append(num**2)

# باستخدام List Comprehension (الاختصار)
squares_comprehension = [num**2 for num in numbers]

print(f"Traditional: {squares_traditional}")
print(f"Comprehension: {squares_comprehension}")


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

['#بايثون', '#برمجة', '#Python', '#CodingTips', '#ListComprehension', '#LearnToCode']
✨ تحسين أداء Python: استخدام Walrus Operator 🐍

هل تريد كتابة كود Python أكثر إيجازًا وكفاءة؟ اكتشف كيف يمكن لمشغل Walrus (:=) مساعدتك في تبسيط عمليات الإسناد والتحقق في سطر واحد!

from math import sqrt

numbers = [16, 25, 36, 49, 64]

# الطريقة التقليدية
for num in numbers:
root = sqrt(num)
if root > 5:
print(f"The square root of {num} is {root}")

# باستخدام Walrus Operator
print('\n--- Using Walrus Operator ---')
for num in numbers:
if (root := sqrt(num)) > 5:
print(f"The square root of {num} is {root}")


مشغل Walrus (:=) يسمح لك بإسناد قيمة لمتغير كجزء من تعبير. في المثال، نقوم بحساب الجذر التربيعي وإسناده للمتغير `root` في نفس الوقت الذي نتحقق فيه مما إذا كانت قيمته أكبر من 5، مما يجعل الكود أقصر وأكثر قابلية للقراءة.

['#Python', '#برمجة', '#WalrusOperator', '#Tips', '#CodeOptimization', '#LearnToCode']
🚀 تحسين أداء Python باستخدام Decorators!

هل تريد جعل كود Python الخاص بك أسرع وأكثر تنظيمًا؟ تعرف على Decorators وكيف يمكنها مساعدتك في ذلك!

import time

def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"الدالة {func.__name__} استغرقت {end_time - start_time:.4f} ثانية")
return result
return wrapper

@timer
def my_slow_function(n):
time.sleep(n)
return "انتهى!"

print(my_slow_function(2))


الـ Decorators في Python تسمح لك بتعديل أو تعزيز سلوك الدوال أو الأصناف بطريقة نظيفة. في هذا المثال، الـ decorator `timer` يقيس الوقت الذي تستغرقه دالة معينة للتنفيذ دون الحاجة لتعديل الكود الأصلي للدالة نفسها. الرمز `@timer` هو طريقة مختصرة لتطبيق الـ decorator.

['#Python', '#Programming', '#Coding', '#Tutorial', '#Decorators', '#PythonTips', '#LearnToCode']
🚀 تحسين أداء Python: استخدام Walrus Operator 🐍

هل تعلم أن Python 3.8 قدمت عامل التعيين (:=) المعروف بـ 'Walrus Operator'؟ دعنا نرى كيف يمكن أن يبسط كودك ويجعله أكثر كفاءة!

import re

# الطريقة التقليدية
text = "Hello, world!"
if re.search(r'world', text):
match = re.search(r'world', text)
print(f"Found: {match.group()}")

# باستخدام Walrus Operator
if (match := re.search(r'world', text)):
print(f"Found: {match.group()}")


الـ Walrus Operator يسمح لك بتعيين قيمة لمتغير كجزء من تعبير. في المثال، نبحث عن كلمة 'world'. بدلاً من البحث مرتين، نستخدم (:=) للبحث مرة واحدة وتعيين النتيجة للمتغير `match` في نفس سطر الشرط. هذا يقلل من تكرار الكود ويحسن القراءة.

['#Python', '#Programming', '#CodingTips', '#WalrusOperator', '#Python38', '#Developer', '#LearnToCode']
🚀 تحسين أداء Python: استخدام `collections.deque` 🚀

هل تعاني من بطء عمليات الإضافة والحذف من بداية القوائم في Python؟ اكتشف كيف يمكن لـ `collections.deque` تسريع هذه العمليات بشكل كبير!

from collections import deque

# إنشاء deque
my_deque = deque(['a', 'b', 'c'])

# إضافة عنصر إلى البداية (أسرع بكثير من list.insert(0, ...))
my_deque.appendleft('x')
print(my_deque) # deque(['x', 'a', 'b', 'c'])

# إضافة عنصر إلى النهاية
my_deque.append('y')
print(my_deque) # deque(['x', 'a', 'b', 'c', 'y'])

# حذف عنصر من البداية (أسرع بكثير من list.pop(0))
first_item = my_deque.popleft()
print(first_item) # x
print(my_deque) # deque(['a', 'b', 'c', 'y'])

# حذف عنصر من النهاية
last_item = my_deque.pop()
print(last_item) # y
print(my_deque) # deque(['a', 'b', 'c'])

# يمكنك أيضاً تحديد حجم أقصى للـ deque
limited_deque = deque(['a', 'b', 'c'], maxlen=3)
limited_deque.append('d')
print(limited_deque) # deque(['b', 'c', 'd']) # أقدم عنصر تم حذفه تلقائياً


تُعد `collections.deque` (اختصار لـ double-ended queue) بنية بيانات مُحسّنة لعمليات الإضافة والحذف السريعة من كلا الطرفين (البداية والنهاية). على عكس القوائم القياسية في Python، حيث تكون عمليات `insert(0, ...)` و `pop(0)` بطيئة (تعقيد زمني O(n)) لأنها تتطلب إعادة ترتيب جميع العناصر، فإن عمليات `appendleft()` و `popleft()` في `deque` لها تعقيد زمني ثابت O(1). هذا يجعلها الخيار الأمثل عند التعامل مع طوابير الانتظار، أو سجلات الأحداث، أو أي سيناريو يتطلب تعديلات متكررة على أطراف مجموعة بيانات.

['#Python', '#Programming', '#DataStructures', '#Optimization', '#CodingTips', '#LearnToCode', '#PythonTips']
✨ تعلم البرمجة بلغة بايثون: المتغيرات وأنواع البيانات ✨

مرحباً بكم في أول درس عملي لتعلم البرمجة باستخدام لغة بايثون! سنتعرف اليوم على أساسيات هامة: المتغيرات وأنواع البيانات.

name = "أحمد"
age = 30
height = 1.75
is_student = False

print(f"الاسم: {name}")
print(f"العمر: {age}")
print(f"الطول: {height}")
print(f"هل هو طالب؟ {is_student}")

print(type(name))
print(type(age))
print(type(height))
print(type(is_student))


في هذا الكود، قمنا بتعريف متغيرات لتخزين أنواع مختلفة من البيانات: نص (string)، عدد صحيح (integer)، عدد عشري (float)، وقيمة منطقية (boolean). الدالة `type()` تساعدنا في معرفة نوع البيانات التي يحتوي عليها كل متغير. هذه هي اللبنات الأساسية لأي برنامج!

['#بايثون', '#برمجة', '#تعلم_البرمجة', '#متغيرات', '#أنواع_البيانات', '#Python', '#Programming', '#LearnToCode']
👍1
✨ تلميح بايثون: استخدام `enumerate` للحصول على الفهرس والقيمة معًا! 🚀

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

my_list = ['apple', 'banana', 'cherry']

for index, value in enumerate(my_list):
print(f"Index: {index}, Value: {value}")


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

['#Python', '#Programming', '#CodingTips', '#LearnToCode', '#PythonTips', '#enumerate']