السلام عليكم ورحمة الله وبركاته

أهلًا وسهلًا بكم مَعْشَرَ البايثونيين، أحببت أن أعرِّفكم على آخر تحديثات بايثون والمتمثِّلة في إصدار بايثون 3.6 الَّذي جلب معه العديد من المزايا المذهلة. وَالآن فالتتفضَّلوا معي في هذه الجولة القصيرة والممتعة؛ فهيَّا بنا :).


منذ فترة أطلق الإصدار التجريبيّ من بايثون 3.6.0 ولتحميله إذهب إلى:

حدثت بعض التعديلات والإضافات. سأتطرق لها تِباعًا..


في مقترح بايثون التحسينيّ ٥٠٦ - م.ب.ت ٥٠٦ (PEP 506)، أضيفت مكتبة «أسرار» secrets إلى جملة المكتبات القياسيَّة.

بدايةً، إنَّ مكتبة «الأسرار» ليست عديمة الفائدة كما قد تبدو للوهلة الأولى!، تَستخدِم هذه المكتبة أرقامًا عشوائيَّة قويَّة وَمشفَّرة ملائِمة لإدارة البيانات مثل كلمات المرور، تأكيد الحسابات...إلخ. وَهذا شيء كانت تفتقده بايثون منذ وقتٍ طويل.

import secrets

print("generating some data...")
print("First, let's pick a random number [1-20[")
newrand=secrets.randbelow(20)
print(f'Your number is {newrand}') #using the new f"…{variable}" style
print("Now let's generate some random codes") #we'll use the default.
print("Bytes: "+str(secrets.token_bytes()))
print("Hex: "+str(secrets.token_hex()))
print("URL Safe: "+str(secrets.token_urlsafe()))

م.ب.ت ٤٩٨ — استيفاء السَّلاسل النَّصيَّة

سلاسل الصِّياغة النصيَّة(formatting strings) وَيُشار إليها اختصارًا f-strings توفِّر طريقة لِتضمين التَّعابير بين مَحارِف السِّلسلة، باستعمال نحويَّة أقل. يجب ملاحظة أنَّ سلاسل الصِّياغة النصيَّة هي تعبيرٌ يُقَدَّر أثناء تشغيل شِفرتك(أي تظهر قيمته عند تشغيل برنامجك) وَليس قيمة ثابتة مُسبقًا. تكون سلسلة الصِّياغة النصيَّة في شفرة بايثون المصدريَّة عبارة عن سلسلة مَحرفيَّة مسبوقة بِالحرف «f» وَتحوي تعابيرًا داخل أقواس مجعَّدة؛ تُستَبدَل التَّعابير بقيمها. الصيغة الجديدة:

"…{___}……"f

هذه بعض الأمثلة(من التوثيق الرسمي لبايثون):

>>> import datetime
>>> name = 'Samer'
>>> age = 23
>>> anniversary = datetime.date(2012, 12, 12)
>>> f'My name is {name}, my age next year is {age+1}, my lovely day is {anniversary:%A, %B %d, %Y}.'
'My name is Samer, my age next year is 24, my lovely day is Wednesday, December 12, 2012.'
>>> f'He said his name is {name!r}.' #!r for putting "name" as raw string.
"He said his name is 'Samer'."

مثالٌ أوسع، سنستخدم وحدة الوقت أيضًا:

import time
import secrets

def wait(max):
    time.sleep(secrets.randbelow(max))
    return

print("Welcome to Python 3.6")
wait(3)
print("Please Wait! ... ... ...")
wait(3)
while True:
    name=input("What is your name? > ")
    print(f'Really, \"{name}\" is your name?'
    decide=input("Y or N > ")
    if decide.upper()=="Y":
        break
    else:
        print("Oh, let's try again!")
        wait(3)

newpass=secrets.token_hex(32)
print(f'Congrats! Your new password is \n{newpass}')

لم أتوقَّع أنَّ سلاسل بايثون النصيَّة قد تصبح أفضل وأمتع بطريقة ما!. هذه الميِّزة الجديدة في بايثون 3.6 جعلتها أكثر بساطة مِمَّا كانت عليه، فيمكننا الآن وضع هذه المتغيِّرات ضمن السلسلة النصيَّة وَرؤية النتيجة بسرعة. في بعض الأحيان لا تقوى إلَّا على أخذ نفسٍ عميق عند رؤية براعة بايثون.. :)

م.ب.ت ٥٢٦ — نحويَّة لِتذييل المُتغيِّرات

ما بايثون إلَّا نسخة أكثر مرحًا من جافا!، أليس كذلك؟ والآن أصبحت ممتعة للغاية. فيمكنك الآن إضافة تذييلات للمتغيِّرات بهدف تحديد أنواع المتغيِّرات الَّتي تعمل عليها؛ فقد تحتاج لأن تُصَرِّح أنَّ إسمًا ما هو إلَّا سلسلة نصيَّة!؟. حسنًا، فالنمضِ بالأمر:

class Sword():
    def __init__(self, metal, ivory):
        self.metal: str=metal
        self.ivory: str=ivory

    def __repr__(self):
        return f"""This sword is made of the finest {self.ivory} bone with the magnificent {self.metal}"""

firstname: str = "Samer"
lastname: str = "Jabal"
sword: Sword = Sword("Steel", "rhinoceros")
print(sword)

فالنتفقَّد الآن التَّذييلات الَّتي قمنا بها.

print(__annotations__)

كما رأيت، يمكنك إضافة النَّوع «str» أو أي كائن آخر إلى المتغيِّرات في بايثون 3.6. لكن يبقى هذا الأمر غير مُستخدمًا مُباشرةً من قِبَل مُفَسِّر بايثون؛ فلديه القدرة على تحديد نوع المتغيِّر دونها. وَيمكنك الإستفادة منه لِـ«أدوات وَمكتبات الطَّرف الثَّالث عبر اختزال الشَّجرة النَّحَوِيَّة وَ الصِّفة __annotations__». حَقًّا، إنَّه لَأمرٌ رائع!.


الآن دورك لِأن تُجَرِّب بايثون 3.6 بنفسك!.

وبالمناسبة، تفقَّد التَّالي:

وأترككم لتبتسموا قليلًا مع بعض الفُكاهة البايثونيَّة..