بدأ العديد من المبرمجين بالانتقال من الإصدار الثاني من بيثون إلى الإصدار الثالث بسبب حقيقة أن دعم بيثون 2 في وقت قريب سوف
يتوقف . يلاحظ مؤلف المقال ، الذي نُنشر ترجمته ، أن الجزء الأكبر من شفرة Python 3 التي رآها ، يشبه رمزًا مع أقواس ، مكتوبًا في Python 2. وفقًا له ، فهو نفسه يخطئ
شيئًا كهذا. يقدم هنا أمثلة لبعض الميزات الرائعة المتوفرة فقط لأولئك الذين يستخدمون Python 3. ويأمل أن تجعل هذه الميزات الحياة أسهل لأولئك الذين يتعلمون عنها.

جميع الأمثلة في هذه المقالة مكتوبة باستخدام Python 3.7. يحتوي وصف كل ميزة على معلومات حول الحد الأدنى من إصدار Python اللازم لاستخدامه.
سلاسل التنسيق (3.6+)
بدون قيود ، من الصعب كتابة شيء مفيد في أي لغة برمجة. ولكن للعمل الفعال مع الأوتار ، يحتاج المطور إلى أدوات ملائمة. هذه الأدوات التي تسمح لك بالعمل مع الهياكل المعقدة دون أن تفقد راحة البال. يستخدم معظم مطوري Python طريقة
format
:
user = "Jane Doe" action = "buy" log_message = 'User {} has logged in and did an action {}.'.format( user, action ) print(log_message)
يدعم Python 3 ، إلى جانب طريقة
format
، سلاسل التنسيق (سلاسل
f ، سلاسل f). إنها أداة مرنة لتنفيذ العديد من عمليات التلاعب بالسلسلة. إليك ما يبدو عليه المثال السابق ، معاد كتابته باستخدام سلاسل التنسيق:
user = "Jane Doe" action = "buy" log_message = f'User {user} has logged in and did an action {action}.' print(log_message)
وحدة Pathlib (3.4+)
سلاسل التنسيق هي تقنية رائعة ، ولكن تم إنشاء أدوات خاصة للعمل مع بعض الخطوط ، مثل مسارات الملفات ، مما يسهل معالجة هذه الخطوط إلى حد كبير. يحتوي Python 3 على وحدة نمطية
pathlib ، وهي تجريد ملائم للعمل مع مسارات الملفات. إذا لم تكن متأكدًا بعد من فائدة هذه الوحدة في حل مشاكلك ، فقم بإلقاء نظرة على
هذه المادة.
from pathlib import Path root = Path('post_sub_folder') print(root)
كتابة التعليقات التوضيحية (3.5+)
أيهما أفضل - الكتابة الساكنة أو الديناميكية؟ ربما يكون لدى كل مبرمج تقريبًا إجابته الخاصة على هذا السؤال الصعب. أترك الأمر للقارئ كيف يصفون برامجهم بالضبط. لكنني أعتقد أنه من الجيد أن يعلم الجميع على الأقل أن Python 3 يدعم
التعليقات التوضيحية على الكتابة .
def sentence_has_animal(sentence: str) -> bool: return "animal" in sentence sentence_has_animal("Donald had a farm without animals")
التحويلات (3.4+)
يدعم Python 3 ، بفضل فئة
Enum
، آلية بسيطة للعمل مع
التعدادات . تعد التعدادات ملائمة لتخزين قوائم الثوابت. الثوابت ، خلاف ذلك ، مبعثرة بشكل عشوائي في الكود.
from enum import Enum, auto class Monster(Enum): ZOMBIE = auto() WARRIOR = auto() BEAR = auto() print(Monster.ZOMBIE)
من
وثائق Python 3 ، يمكنك معرفة أن التعداد عبارة عن مجموعة من الأسماء الرمزية (الأعضاء) مرتبطة بقيم فريدة وغير قابلة للتغيير. يمكن مقارنة أعضاء قائمة واحدة للهوية. يمكن تجاوز التعدادات.
for monster in Monster: print(monster)
ذاكرة التخزين المؤقت المدمجة LRU (3.2+)
في الوقت الحاضر ، يتم استخدام آليات التخزين المؤقت في جميع أنظمة البرمجيات والأجهزة تقريبًا. يعمل Python 3 على تبسيط عملية التخزين المؤقت إلى حد كبير باستخدام أداة
lru_cache decorator ، والتي تنفذ خوارزمية التخزين المؤقت LRU (
الأقل استخدامًا في الآونة الأخيرة ).
فيما يلي دالة تقوم بحساب أرقام فيبوناتشي. يتم فرض هذه الوظيفة عدة مرات لأداء نفس العمليات أثناء المكالمات المتكررة. نتيجة لذلك ، اتضح أنه يمكن تحسين أدائها من خلال التخزين المؤقت.
import time def fib(number: int) -> int: if number == 0: return 0 if number == 1: return 1 return fib(number-1) + fib(number-2) start = time.time() fib(40) print(f'Duration: {time.time() - start}s')
الآن نستخدم
lru_cache
لتحسين هذه الوظيفة (تسمى تقنية التحسين هذه
المذكرة ). نتيجة لذلك ، يتم الآن قياس وقت تنفيذ دالة تم قياسها مسبقًا بالثواني بالنانو ثانية.
from functools import lru_cache @lru_cache(maxsize=512) def fib_memoization(number: int) -> int: if number == 0: return 0 if number == 1: return 1 return fib_memoization(number-1) + fib_memoization(number-2) start = time.time() fib_memoization(40) print(f'Duration: {time.time() - start}s')
تفريغ الكائنات القابلة للتكرار (3.0+)
عند
تفريغ الكائنات القابلة للتكرار ، يمكنك استخدام المتغيرات التي تسبق أسماؤها علامة نجمية. كل ما لا يلائم المتغيرات الأخرى يحصل على مثل هذه المتغيرات. لذلك ، في المثال التالي ، تندرج القيمتان الأولى والأخيرة من القائمة المشكلة بواسطة الأمر
range(5)
في
head
المتغيرات
tail
. كل ما بين القيمة الأولى والأخيرة يدخل في متغير
body
.
head, *body, tail = range(5) print(head, body, tail)
فئات البيانات (3.7+)
قدم بيثون 3
فئات البيانات . أنها تعطي للمبرمج الكثير من حرية العمل. يمكن استخدامها لتقليل مقدار رمز الغلاية. الحقيقة هي أن مصمم
dataclass
تلقائيًا بإنشاء طرق خاصة ، مثل
__init__()
و
__repr__()
. في النص الرسمي
للاقتراح المقابل
، يتم وصفها على أنها "tuples المسماة قابلة للتغيير مع القيم الافتراضية." فيما يلي مثال على إنشاء فئة دون استخدام مصمم
dataclass
:
class Armor: def __init__(self, armor: float, description: str, level: int = 1): self.armor = armor self.level = level self.description = description def power(self) -> float: return self.armor * self.level armor = Armor(5.2, "Common armor.", 2) armor.power()
هنا هو نفسه ، ولكن مكتوب بالفعل باستخدام
dataclass
:
from dataclasses import dataclass @dataclass class Armor: armor: float description: str level: int = 1 def power(self) -> float: return self.armor * self.level armor = Armor(5.2, "Common armor.", 2) armor.power()
دعم مجلد الحزمة بدون ملف __init__.py (3.3+)
تتمثل إحدى طرق تكوين رمز Python في استخدام
الحزم (يتم وضع الحزم في مجلدات تحتوي على ملف
__init__.py
). فيما يلي مثال من الوثائق الرسمية:
sound/ __init__.py sound formats/ __init__.py wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py ... effects/ __init__.py echo.py surround.py reverse.py ... filters/ __init__.py equalizer.py vocoder.py karaoke.py ...
عند استخدام Python 2 ، يجب أن يحتوي كل مجلد من المجلدات المذكورة في المثال على ملف
__init__.py
. بفضل هذا الملف ، يُنظر إلى المجلد كحزمة بيثون. في Python 3 ، مع ظهور ميزة
حزم مساحة الاسم الضمنية ، لم تعد هناك حاجة لمثل هذه المجلدات.
sound/ __init__.py sound formats/ wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py ... effects/ echo.py surround.py reverse.py ... filters/ equalizer.py vocoder.py karaoke.py ...
تجدر الإشارة إلى أنه في الواقع ، كل شيء ليس بهذه البساطة. وهي ، وفقًا
لهذه المواصفات الرسمية ، لا يزال ملف
__init__.py
ضروريًا للحزم العادية. إذا قمت بإزالته من المجلد ، فستتحول الحزمة إلى ما يسمى
حزمة مساحة الاسم ، والتي تنطبق عليها قيود إضافية.
النتائج
لا يتم تغطية جميع ميزات Python 3 المثيرة للاهتمام في هذه المقالة ، لكننا نأمل أن تجد شيئًا مفيدًا هنا. يمكن العثور على نموذج التعليمة البرمجية في
هذا المستودع.
أعزائي القراء! ما هي ميزات Python 3 التي تضيفها إلى القائمة هنا؟
