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

حتى لو كنت مبرمجاً ينتقل إلى Python من لغة أخرى مثل C ، أو إذا كنت عالماً اعتاد أن يعمل في MATLAB ، فإن برمجة Python باستخدام التجريدات عالية المستوى هي بالتأكيد تجربة خاصة للغاية. أريد أن أتحدث عن خمسة أشياء مهمة للغاية ، في رأيي ، ميزات بيثون لم أكن أعرفها من قبل لسوء الحظ.
1. إدراج قائمة - كتابة رمز مضغوط
قد يسمي الكثيرون آليات بيثون مثل
lambda
،
map
filter
الأسرار ذاتها التي يجب أن يتعلمها كل مبرمج مبتدئ. وعلى الرغم من أنني متأكد من أن كل هذا يستحق المعرفة ، إلا أنه في معظم المواقف التي يمكن فيها تطبيق هذه الأدوات ، واجهت مرونة غير كافية لهذه الأدوات. نتيجة لذلك ، فهي أبعد ما تكون عن أن تكون مفيدة كما قد يبدو.
Lambda
هي طريقة لإنشاء وظائف صغيرة ذات سطر مفرد للاستخدام الفردي. إذا تم استدعاء وظيفة عدة مرات ، فإنها تحط من الأداء. ولكن في نفس الوقت ، تطبق وظيفة
map
الوظيفة على جميع عناصر القائمة ، ويختار
filter
من مجموعة معينة من العناصر مجموعة فرعية مطابقة للشرط المحدد من قبل المستخدم.
add_func = lambda z: z ** 2 is_odd = lambda z: z%2 == 1 multiply = lambda x,y: x*y aList = list(range(10)) print(aList)
إدراج القائمة (فهم القائمة) هو تصميم مضغوط ومناسب يستخدم لإنشاء قوائم من قوائم أخرى باستخدام تعبيرات وشروط مرنة. يوصف هذا البناء باستخدام الأقواس المربعة. وهي تشمل التعبيرات أو الوظائف التي تنطبق على كل عنصر من عناصر القائمة فقط إذا كان هذا العنصر يفي بشرط معين. يمكن أن يكون إدراج القائمة بنية متعددة المستويات تحتوي على كتل متداخلة. يتيح لك ذلك معالجة القوائم المتداخلة ، مما يتيح مرونة أكبر من استخدام
map
filter
.
فيما يلي بناء جملة إدراج القائمة:
[ expression(x) for x in aList if optional_condition(x) ]
هنا مثال:
print(list(map(add_func, aList))) print([x ** 2 for x in aList])
2. العمل مع قوائم - قوائم دائرية
يسمح لك Python باستخدام فهارس سالبة عند العمل مع القوائم. المقارنة التالية صحيحة:
aList[-1] == aList[len(aList)-1]
هذا يجعل من الممكن ، على سبيل المثال ، الحصول على العنصر الثاني من نهاية القائمة باستخدام
aList[-2]
. تصاميم أخرى مماثلة ممكنة.
بالإضافة إلى ذلك ، يمكنك الحصول على شريحة من القائمة:
aList[start:end:step]
هنا ، يتم تضمين العنصر الأولي للقائمة في الشريحة الناتجة ، ولا يتم تضمين العنصر الأخير فيه. لنفترض أن القائمة تبدو كالتالي:
aList = [1, 2, 3, 4, 5, 6, 7, 8, 9]
aList[2:5]
شريحة
aList[2:5]
وكأنها
[2, 3, 4]
. بالإضافة إلى ذلك ، يمكنك "قلب" القائمة باستخدام الأمر
aList[::-1]
. في حالتنا ، سيعطي هذا
[9, 8, 7, 6, 5, 4, 3, 2, 1]
. أجد هذا الحل لمهمة "الوجه" من القائمة بصرية وناجحة للغاية.
يمكنك أيضًا تفريغ القائمة من خلال وضع القيم المخزنة فيها في متغيرات منفصلة. أو - "تحليل" قيمه إلى متغيرات منفصلة وقوائم جديدة باستخدام علامة النجمة:
a, b, c, d = aList[0:4] print(f'a = {a}, b = {b}, c = {c}, d = {d}')
3. الرمز البريدي وتعداد وظائف - خلق قوية للحلقات
تقوم الدالة
zip
بإنشاء مكرر يجمع عناصر العديد من القوائم. يسمح هذا بالزحف المتوازي للقوائم الموجودة للحلقات والفرز المتوازي. يمكنك إرجاع العناصر المدمجة إلى حالتها الطبيعية باستخدام عامل التشغيل
*
.
فيما يلي مثال على العمل مع وظيفة
zip
:
numList = [0, 1, 2] engList = ['zero', 'one', 'two'] espList = ['cero', 'uno', 'dos'] print(list(zip(numList, engList, espList)))
ولكن إليك كيفية إرجاع القوائم إلى حالتها الطبيعية:
Eng = list(zip(engList, espList, numList)) Eng.sort()
قد تبدو وظيفة
enumerate
، للوهلة الأولى ، معقدة للغاية ، ولكن إذا تعاملت معها ، فقد تبين أنها قد تكون مفيدة في العديد من الحالات. هذا عداد تلقائي يستخدم غالبًا للحلقات. علاوة على ذلك ، في مثل هذه الدورات ، ليس من الضروري إنشاء وزيادة عداد متغير باستخدام إنشاءات مثل
counter = 0
و
counter += 1
.
تعد الوظائف
zip
enumerate
من أقوى الأدوات المستخدمة في إنشاء الحلقات:
upperCase = ['A', 'B', 'C', 'D', 'E', 'F'] lowerCase = ['a', 'b', 'c', 'd', 'e', 'f'] for i, (upper, lower) in enumerate(zip(upperCase, lowerCase), 1): print(f'{i}: {upper} and {lower}.')
4. مولدات - الاستخدام الفعال للذاكرة
تُستخدم المولدات في الحالات التي يكون فيها من الضروري إجراء عمليات حسابية معينة تؤدي إلى ظهور مجموعة كبيرة من النتائج ، ولكن في الوقت نفسه ، من الضروري تجنب تخصيص ذاكرة واحدة لتخزين كل هذه النتائج. بمعنى آخر ، المولدات تعطي قيمًا معينة ، كما يقولون ، "سريعًا". ومع ذلك ، فإنها لا تخزن في الذاكرة القيم التي تم العثور عليها مسبقًا. نتيجة لذلك ، يتم استخدام الذاكرة لماما.
غالبًا ما تستخدم المولدات في قراءة الملفات الكبيرة أو لإنشاء تسلسلات غير محدودة باستخدام الكلمة الأساسية ذات
yield
. كثيرا ما أجد أنه من المناسب استخدامها في مشاريعي البحثية.
def gen(n):
5. البيئة الافتراضية - رمز العزلة
إذا تمكنت من اختيار فكرة واحدة فقط من هذه المقالة يمكنك تذكرها ، فإني أنصحك بالفكرة التي سنتحدث عنها في هذا القسم. نحن نتحدث عن البيئات الافتراضية (البيئة الافتراضية).
غالبًا ما تستخدم تطبيقات Python حزمًا مختلفة. تم إنشاؤها من قبل مطورين مختلفين ، فهي تختلف في مجموعات معقدة من التبعيات. في تطبيق معين ، يمكن استخدام إصدار معين من مكتبة معينة. ومع ذلك ، لن يعمل إصدار آخر لمثل هذا التطبيق. ولكن ماذا لو استخدمت عدة تطبيقات إصدارات مختلفة من نفس المكتبة؟ هذا سؤال صعب يقودنا إلى فكرة أنه لا توجد بيئة عالمية ، الحزم المثبتة مناسبة لجميع التطبيقات تمامًا. يمكن تسمية إجابة هذا السؤال باستخدام البيئات الافتراضية.
لإنشاء بيئات افتراضية معزولة عن بعضها البعض ، يمكنك القيام بذلك:
conda create -n venv pip python=3.7
النتائج
في هذا المقال ، قمنا بتغطية 5 ميزات بيثون مفيدة. وهي تتعلق بإدراج قوائم ، حول قوائم دورية ، حول وظائف
zip
enumerate
، حول المولدات والبيئات الافتراضية. نأمل أن تكون هذه الميزات مفيدة.
أعزائي القراء! إذا تمكنت من إخبار مبرمج مبتدئ بميزة واحدة فقط من بيثون ، فماذا تختار؟
