✨ شرح namedtuple واستخداماته في بايثون
هل سئمت من تذكر ترتيب العناصر في الـ tuples العادية؟ الـ namedtuple هي الحل! تتيح لك الوصول إلى عناصر الـ tuple باستخدام أسماء حقول واضحة، مما يجعل كودك أكثر قابلية للقراءة والصيانة.
الـ `namedtuple` من وحدة `collections` تسمح لك بإنشاء أنواع تشبه الـ tuples ولكن مع أسماء حقول. هذا يجعل الوصول إلى البيانات أكثر وضوحًا (مثل `person1.name`) بدلاً من الاعتماد على الفهارس (مثل `person1[0]`). كما توفر طرقًا مفيدة مثل `_make` لإنشاء كائنات من تسلسلات و `_asdict` لتحويلها إلى قواميس.
['#بايثون', '#namedtuple', '#برمجة', '#Python', '#CodingTips', '#DataStructures']
هل سئمت من تذكر ترتيب العناصر في الـ tuples العادية؟ الـ namedtuple هي الحل! تتيح لك الوصول إلى عناصر الـ tuple باستخدام أسماء حقول واضحة، مما يجعل كودك أكثر قابلية للقراءة والصيانة.
from collections import namedtuple
# تعريف namedtuple لتمثيل شخص
Person = namedtuple('Person', ['name', 'age', 'city'])
# إنشاء كائن من namedtuple
person1 = Person(name='أحمد', age=30, city='القاهرة')
person2 = Person('فاطمة', 25, 'الرياض')
# الوصول إلى العناصر بالاسم
print(f"الاسم: {person1.name}, العمر: {person1.age}, المدينة: {person1.city}")
# الوصول إلى العناصر بالترتيب (كما في الـ tuple العادية)
print(f"الاسم: {person1[0]}, العمر: {person1[1]}, المدينة: {person1[2]}")
# يمكنك أيضاً استخدام _make لإنشاء كائن من قائمة أو tuple
data = ['سارة', 22, 'دبي']
person3 = Person._make(data)
print(person3)
# و _asdict لتحويل الكائن إلى قاموس
person_dict = person1._asdict()
print(person_dict)
الـ `namedtuple` من وحدة `collections` تسمح لك بإنشاء أنواع تشبه الـ tuples ولكن مع أسماء حقول. هذا يجعل الوصول إلى البيانات أكثر وضوحًا (مثل `person1.name`) بدلاً من الاعتماد على الفهارس (مثل `person1[0]`). كما توفر طرقًا مفيدة مثل `_make` لإنشاء كائنات من تسلسلات و `_asdict` لتحويلها إلى قواميس.
['#بايثون', '#namedtuple', '#برمجة', '#Python', '#CodingTips', '#DataStructures']
Walrus Operator (:=) في بايثون 🐍
تعلم كيف تستخدم عامل التعيين (Walrus Operator) الجديد في بايثون 3.8+ لتبسيط أكوادك.
عامل التعيين (:=) المعروف باسم Walrus Operator يسمح لك بتعيين قيمة لمتغير كجزء من تعبير. هذا مفيد بشكل خاص في عبارات مثل if و while حيث يمكنك تعيين قيمة واختبارها في نفس الوقت، مما يقلل من تكرار الكود.
['#Python', '#WalrusOperator', '#Programming', '#CodingTips', '#Python3']
تعلم كيف تستخدم عامل التعيين (Walrus Operator) الجديد في بايثون 3.8+ لتبسيط أكوادك.
import re
# بدون Walrus Operator
line = input('Enter a line: ')
if re.match(r'[aeiou]', line):
print('Starts with a vowel')
# مع Walrus Operator
if re.match(r'[aeiou]', line := input('Enter a line: ')):
print('Starts with a vowel')
عامل التعيين (:=) المعروف باسم Walrus Operator يسمح لك بتعيين قيمة لمتغير كجزء من تعبير. هذا مفيد بشكل خاص في عبارات مثل if و while حيث يمكنك تعيين قيمة واختبارها في نفس الوقت، مما يقلل من تكرار الكود.
['#Python', '#WalrusOperator', '#Programming', '#CodingTips', '#Python3']
🐍 خدع بايثون: دمج القواميس بكفاءة!
تعلم طرقًا سريعة وفعالة لدمج القواميس في بايثون، مما يجعل شيفرتك أكثر أناقة.
توضح هذه الشيفرة ثلاث طرق مختلفة لدمج القواميس في بايثون. الطريقة الأولى تستخدم `update()`، وهي مناسبة للإصدارات القديمة. الطريقة الثانية تستخدم عامل التفريغ `**`، وهو شائع وفعال في بايثون 3.5+. الطريقة الثالثة، وهي الأحدث والأكثر أناقة، تستخدم عامل الدمج `|` المتوفر في بايثون 3.9+. لاحظ أن القيم المتكررة تأخذ قيمها من القاموس الأخير.
['#بايثون', '#برمجة', '#Python', '#Dictionaries', '#CodingTips', '#PythonTricks']
تعلم طرقًا سريعة وفعالة لدمج القواميس في بايثون، مما يجعل شيفرتك أكثر أناقة.
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
# الطريقة الأولى: استخدام update()
dmerged_dict1 = dict1.copy()
merged_dict1.update(dict2)
print(f"بعد update(): {merged_dict1}")
# الطريقة الثانية: استخدام عامل التفريغ (**) (Python 3.5+)
merged_dict2 = {**dict1, **dict2}
print(f"بعد عامل التفريغ: {merged_dict2}")
# الطريقة الثالثة: استخدام عامل الدمج (|) (Python 3.9+)
merged_dict3 = dict1 | dict2
print(f"بعد عامل الدمج: {merged_dict3}")توضح هذه الشيفرة ثلاث طرق مختلفة لدمج القواميس في بايثون. الطريقة الأولى تستخدم `update()`، وهي مناسبة للإصدارات القديمة. الطريقة الثانية تستخدم عامل التفريغ `**`، وهو شائع وفعال في بايثون 3.5+. الطريقة الثالثة، وهي الأحدث والأكثر أناقة، تستخدم عامل الدمج `|` المتوفر في بايثون 3.9+. لاحظ أن القيم المتكررة تأخذ قيمها من القاموس الأخير.
['#بايثون', '#برمجة', '#Python', '#Dictionaries', '#CodingTips', '#PythonTricks']
💡 تعلم اختصارات بايثون المفيدة! 🐍
هل تريد كتابة كود بايثون أسرع وأكثر فعالية؟ إليك بعض الاختصارات التي ستغير طريقة تفكيرك في كتابة الكود!
List comprehensions في بايثون توفر طريقة موجزة لإنشاء القوائم. بدلاً من استخدام حلقة `for` تقليدية مع `append`، يمكنك كتابة نفس المنطق في سطر واحد، مما يجعل الكود أقصر وأسهل للقراءة في كثير من الأحيان.
['#بايثون', '#برمجة', '#Python', '#CodingTips', '#ListComprehension', '#LearnToCode']
هل تريد كتابة كود بايثون أسرع وأكثر فعالية؟ إليك بعض الاختصارات التي ستغير طريقة تفكيرك في كتابة الكود!
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 3.8 قدمت عامل التعيين (:=) المعروف بـ 'Walrus Operator'؟ دعنا نرى كيف يمكن أن يبسط كودك ويجعله أكثر كفاءة!
الـ Walrus Operator يسمح لك بتعيين قيمة لمتغير كجزء من تعبير. في المثال، نبحث عن كلمة 'world'. بدلاً من البحث مرتين، نستخدم (:=) للبحث مرة واحدة وتعيين النتيجة للمتغير `match` في نفس سطر الشرط. هذا يقلل من تكرار الكود ويحسن القراءة.
['#Python', '#Programming', '#CodingTips', '#WalrusOperator', '#Python38', '#Developer', '#LearnToCode']
هل تعلم أن 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` تسريع هذه العمليات بشكل كبير!
تُعد `collections.deque` (اختصار لـ double-ended queue) بنية بيانات مُحسّنة لعمليات الإضافة والحذف السريعة من كلا الطرفين (البداية والنهاية). على عكس القوائم القياسية في Python، حيث تكون عمليات `insert(0, ...)` و `pop(0)` بطيئة (تعقيد زمني O(n)) لأنها تتطلب إعادة ترتيب جميع العناصر، فإن عمليات `appendleft()` و `popleft()` في `deque` لها تعقيد زمني ثابت O(1). هذا يجعلها الخيار الأمثل عند التعامل مع طوابير الانتظار، أو سجلات الأحداث، أو أي سيناريو يتطلب تعديلات متكررة على أطراف مجموعة بيانات.
['#Python', '#Programming', '#DataStructures', '#Optimization', '#CodingTips', '#LearnToCode', '#PythonTips']
هل تعاني من بطء عمليات الإضافة والحذف من بداية القوائم في 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']
🐍 تحسين أداء Python باستخدام List Comprehensions ✨
هل سئمت من الحلقات المتعرجة والمعقدة في Python؟ إليك طريقة أنيقة وفعالة لكتابة الكود الخاص بك باستخدام List Comprehensions!
List Comprehensions توفر طريقة موجزة لإنشاء القوائم. بدلاً من كتابة حلقة `for` تقليدية، يمكنك إنشاء قائمة جديدة في سطر واحد. هذا يجعل الكود أكثر قابلية للقراءة وأسرع في التنفيذ.
['#Python', '#ListComprehensions', '#Programming', '#CodingTips', '#Pythonic']
هل سئمت من الحلقات المتعرجة والمعقدة في Python؟ إليك طريقة أنيقة وفعالة لكتابة الكود الخاص بك باستخدام List Comprehensions!
numbers = [1, 2, 3, 4, 5]
squares = [n**2 for n in numbers]
print(squares)
List Comprehensions توفر طريقة موجزة لإنشاء القوائم. بدلاً من كتابة حلقة `for` تقليدية، يمكنك إنشاء قائمة جديدة في سطر واحد. هذا يجعل الكود أكثر قابلية للقراءة وأسرع في التنفيذ.
['#Python', '#ListComprehensions', '#Programming', '#CodingTips', '#Pythonic']
✨ تلميح بايثون: استخدام `enumerate` للحصول على الفهرس والقيمة معًا! 🚀
هل سئمت من تتبع الفهرس يدويًا أثناء التكرار على القوائم في بايثون؟ استخدم `enumerate` لجعل الكود الخاص بك أكثر نظافة وكفاءة!
الدالة `enumerate()` تأخذ كائنًا قابلًا للتكرار (مثل القائمة) وتعيد كائن `enumerate` الذي ينتج أزواجًا من الفهرس والعنصر. هذا يبسط الوصول إلى كليهما في حلقة `for`.
['#Python', '#Programming', '#CodingTips', '#LearnToCode', '#PythonTips', '#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']
✨ تحسين أداء Python: استخدام Walrus Operator (:=) 🐍
هل تريد كتابة كود Python أكثر إيجازًا وكفاءة؟ تعرف على عامل التعيين (Walrus Operator) الجديد في Python 3.8+
يسمح لك عامل التعيين (:=) بتعيين قيمة لمتغير كجزء من تعبير. هذا يجعل الكود أقصر وأكثر قابلية للقراءة في بعض الحالات، مثل التحقق من نتيجة دالة تعيين.
['#Python', '#WalrusOperator', '#CodingTips', '#Programming', '#Python38']
هل تريد كتابة كود Python أكثر إيجازًا وكفاءة؟ تعرف على عامل التعيين (Walrus Operator) الجديد في Python 3.8+
import re
text = "Hello, world!"
# بدون Walrus Operator
match = re.search(r'world', text)
if match:
print(f"Found: {match.group()}")
# مع Walrus Operator (:=)
if (match := re.search(r'world', text)):
print(f"Found: {match.group()}")
يسمح لك عامل التعيين (:=) بتعيين قيمة لمتغير كجزء من تعبير. هذا يجعل الكود أقصر وأكثر قابلية للقراءة في بعض الحالات، مثل التحقق من نتيجة دالة تعيين.
['#Python', '#WalrusOperator', '#CodingTips', '#Programming', '#Python38']
❤1
✨ فهم ميزة 'Walrus Operator' في بايثون 🐍
هل سبق لك أن شعرت أن كود بايثون الخاص بك يمكن أن يكون أقصر وأكثر وضوحًا؟ تعرف على "عامل الفظ" (Walrus Operator) وكيف يمكنه تبسيط تعيين المتغيرات داخل التعبيرات!
عامل الفظ (:=) يسمح لك بتعيين قيمة لمتغير كجزء من تعبير. في المثال، يتم البحث عن كلمة 'world' في النص، وإذا تم العثور عليها، يتم تخزين نتيجة البحث في المتغير `match` ويتم استخدام هذا المتغير مباشرة في جملة `if`. هذا يجعل الكود أكثر إيجازًا، خاصة في حالات مثل التحقق من الشروط وتعيين القيم في نفس الوقت.
['#Python', '#Programming', '#WalrusOperator', '#CodingTips', '#LearnPython', '#بايثون', '#برمجة']
هل سبق لك أن شعرت أن كود بايثون الخاص بك يمكن أن يكون أقصر وأكثر وضوحًا؟ تعرف على "عامل الفظ" (Walrus Operator) وكيف يمكنه تبسيط تعيين المتغيرات داخل التعبيرات!
import re
text = "Hello, world!"
if match := re.search(r"world", text):
print(f"Found 'world' at index {match.start()}")
else:
print("Not found")
# بدون عامل الفظ، ستبدو هكذا:
# match = re.search(r"world", text)
# if match:
# print(f"Found 'world' at index {match.start()}")
# else:
# print("Not found")
عامل الفظ (:=) يسمح لك بتعيين قيمة لمتغير كجزء من تعبير. في المثال، يتم البحث عن كلمة 'world' في النص، وإذا تم العثور عليها، يتم تخزين نتيجة البحث في المتغير `match` ويتم استخدام هذا المتغير مباشرة في جملة `if`. هذا يجعل الكود أكثر إيجازًا، خاصة في حالات مثل التحقق من الشروط وتعيين القيم في نفس الوقت.
['#Python', '#Programming', '#WalrusOperator', '#CodingTips', '#LearnPython', '#بايثون', '#برمجة']
💡 اختصار سحري في بايثون: إزالة التكرار من القوائم! 🚀
هل سئمت من القوائم المليئة بالعناصر المكررة؟ إليك طريقة بايثونية أنيقة للتخلص منها بسرعة وسهولة!
نحول القائمة الأصلية إلى 'set' (مجموعة)، والتي بطبيعتها لا تسمح بالتكرار. ثم نعيد تحويلها إلى قائمة مرة أخرى. بهذه البساطة!
['#بايثون', '#برمجة', '#Python', '#CodingTips', '#DataScience', '#تعلم_البرمجة']
هل سئمت من القوائم المليئة بالعناصر المكررة؟ إليك طريقة بايثونية أنيقة للتخلص منها بسرعة وسهولة!
my_list = [1, 2, 2, 3, 4, 4, 4, 5]
unique_list = list(set(my_list))
print(unique_list)
نحول القائمة الأصلية إلى 'set' (مجموعة)، والتي بطبيعتها لا تسمح بالتكرار. ثم نعيد تحويلها إلى قائمة مرة أخرى. بهذه البساطة!
['#بايثون', '#برمجة', '#Python', '#CodingTips', '#DataScience', '#تعلم_البرمجة']
💡 نصيحة بايثون: استخدام Walrus Operator (:=) 🚀
هل سئمت من تكرار المتغيرات في شروطك؟ عامل Walrus الجديد في بايثون (:=) يحل هذه المشكلة بذكاء!
عامل Walrus (:=) يسمح لك بتعيين قيمة لمتغير داخل تعبير. في هذا المثال، نبحث عن كلمة 'world' في النص. إذا تم العثور عليها، يتم تعيين نتيجة البحث للمتغير 'match' ثم يتم استخدام 'match' مباشرة في جملة if. هذا يجعل الكود أقصر وأكثر قابلية للقراءة.
['#Python', '#Programming', '#CodingTips', '#Developer', '#Python3', '#WalrusOperator']
هل سئمت من تكرار المتغيرات في شروطك؟ عامل Walrus الجديد في بايثون (:=) يحل هذه المشكلة بذكاء!
import re
text = "Hello, world!"
if (match := re.search(r"world", text)):
print(f"Found: {match.group()}")
else:
print("Not found")
عامل Walrus (:=) يسمح لك بتعيين قيمة لمتغير داخل تعبير. في هذا المثال، نبحث عن كلمة 'world' في النص. إذا تم العثور عليها، يتم تعيين نتيجة البحث للمتغير 'match' ثم يتم استخدام 'match' مباشرة في جملة if. هذا يجعل الكود أقصر وأكثر قابلية للقراءة.
['#Python', '#Programming', '#CodingTips', '#Developer', '#Python3', '#WalrusOperator']