نواصل نشر ترجمة سلسلة من المقالات حول أوجه التشابه والاختلاف بين اللغتين.
سنتحدث اليوم عن تسلسل القواميس و JSON والنظامي والأخطاء والاستثناءات.
مقالات أخرى في هذه السلسلة:
- الجزء الأول هو تحويل النوع ، عامل التشغيل الثلاثي ، الوصول إلى خاصية من خلال اسم الخاصية ، القواميس ، القوائم ، السلاسل ، سلسلة متسلسلة.
- هذه المقالة
- الجزء الثالث : Python و JS الحديث: أنماط السلسلة (سلاسل f) ، تفريغ القوائم ، وظائف لامدا ، قائمة التكرار ، المولدات ، المجموعات.
- الجزء الرابع هو الحجج الوظيفية ، وخلق والعمل مع الطبقات ، والميراث ، و gitter وخصائص الطبقة.
جسون
عند العمل مع العديد من واجهات برمجة التطبيقات ، من السهل إجراء تسلسل للكائنات في كائنات JSON لسهولة النقل والتحليل اللاحق.
يحتوي Python على وحدة json قياسية:
import json json_data = json.dumps(dictionary, indent=4) dictionary = json.loads(json_data)
هنا نقوم بتنسيق JSON مع وضع مسافة بادئة لـ 4 مسافات.
في JS ، يوجد كائن JSON مع طرق لإنشاء سلاسل JSON وتحليلها:
json_data = JSON.stringify(dictionary, null, 4); dictionary = JSON.parse(json_data);
سلاسل التحليل مع النظامي
في المقالة الأخيرة ، قمنا بدمج عدة أسطر في سطر واحد. ولكن كيف يمكن تقسيم سلسلة طويلة واحدة إلى عدة ، خاصة إذا لم يكن الفاصل حرفًا واحدًا مثل الفاصلة ، ولكنه نطاق كامل من الخيارات المختلفة؟ هذا هو المكان الذي تأتي فيه التعبيرات العادية وأسلوب split()
إلى الإنقاذ.
في بايثون ، تشير طريقة split()
إلى نمط تعبير عادي. إليك كيفية تقسيم سلسلة نصية إلى جمل علامات ترقيم:
import re
في JS ، تشير طريقة split()
إلى السلاسل:
البحث المنتظم حسب النمط
غالبًا ما تُستخدم التعبيرات العادية للتحقق من صحة البيانات من النماذج.
على سبيل المثال ، للتحقق من صحة عنوان البريد الإلكتروني الذي تم إدخاله ، يجب مقارنته بنمط التعبير العادي.
مؤلف الترجمة في الدورةأن التحقق من العنوان مع النظامي هو مهمة غير تافهة وأكثر تعقيدًا قليلاً من الطريقة الواردة في هذه المقالة
في Python ، سيبدو شيئًا مثل هذا:
import re
إذا كان قسم من النص يطابق قالبًا ، فإن استخدام طريقة group()
يُرجع القسم بأكمله الذي يمكنك من خلاله تحديد مجموعات فردية محددة في القالب.
0 - تطابق الخط بالكامل (الفرعي) ، 1 - المجموعة الأولى ، 2 - الثانية ، إلخ.
إذا لم يتم العثور على تطابقات ، فسيتم إرجاع كائن من النوع بلا.
في JS ، يوجد match()
أسلوب السلسلة match()
يُرجع إما الجزء المتطابق من السلسلة أو قيمة null
.
في JS ، يبدو الكائن المتطابق صفيفًا. العنصر ذو الفهرس [0] هو الصف (الفرعي) الذي يتطابق بالكامل ، والعنصر الأول هو المجموعة الأولى ، والثاني هو الثاني ، وما إلى ذلك. - كل ذلك وفقًا للمجموعات المحددة في النموذج.
في بعض الأحيان ، بالإضافة إلى البحث ، يلزم تحديد موضع العينة في النص. يمكن القيام بذلك باستخدام طريقة search()
.
في Python ، تشير هذه الطريقة إلى التعبيرات العادية وترجع كائنًا مطابقًا. يحتوي هذا الكائن المطابق على طريقة start()
التي ترجع بداية حدوث هذه السلسلة الفرعية في السطر الرئيسي:
text = 'Say hi at hi@example.com' first_match = pattern.search(text) if first_match: start = first_match.start()
يحتوي أسلوب JS على search()
أسلوب سلسلة search()
بإرجاع فهرس بداية السلسلة الفرعية. أو -1
إذا لم يتم العثور على تطابقات.
text = 'Say hi at hi@example.com'; first_match = text.search(pattern); if (first_match > -1) { start = first_match;
استبدل بالنمط باستخدام التعبيرات العادية
عادة ، هناك حاجة لاستبدال القالب عندما تريد مسح البيانات أو إضافة بعض الخصائص إلى النص. على سبيل المثال ، يمكننا أن نأخذ خطًا ونجعل جميع عناوين البريد الإلكتروني تجد روابط:
لدى Python طريقة نمط تعبير sub()
لهذا:
html = pattern.sub( r'<a href="mailto:\g<0>">\g<0></a>', 'Say hi at hi@example.com', )
يمكن لمطوري JS استخدام طريقة السلسلة replace()
:
html = 'Say hi at hi@example.com'.replace( pattern, '<a href="mailto:$&">$&</a>', );
في Python ، تتوفر المجموعات المطابقة مثل \g<0>, \g<1>, \g<2>
، إلخ.
في JS ، مثل $&, $1, $2
، إلخ.
من الممكن أيضًا استبدال الجزء المطابق بوظيفة. هذه الوظائف مفيدة عند استبدال التفاف النص المصدر أو لحساب أو جمع أو الحصول على معلومات أخرى حول النص. على سبيل المثال ، عندما أستخدم استدعاء دالة عند الاستبدال ، يمكنني كتابة تمييز بناء جملة HTML.
دعنا نغير جميع عناوين البريد الإلكتروني في حروف كبيرة.
في Python ، تحصل وظيفة الاستبدال على الكائن المتطابق. نستخدم طريقة group () لتنفيذ إجراءات مع النص المطابق وإعادته كبديل:
text = pattern.sub( lambda match: match.group(0).upper(), 'Say hi at hi@example.com', )
في JS ، تحصل وظيفة الاستبدال على مطابقة السلسلة بأكملها ، التواجد الأول ، الثاني ، إلخ. نقوم بتنفيذ الإجراءات اللازمة ونعيد الخط المعدل:
text = 'Say hi at hi@example.com'.replace( pattern, function(match, p1, p2) { return match.toUpperCase(); } );
معالجة الخطأ
على عكس Python ، عادةً لا يتم استخدام JavaScript المستند إلى المستعرض الأمامي لكتابة / قراءة الملفات أو الوصول إلى قواعد البيانات. لذلك ، try..catch
كتل try..catch
نادرة جدًا في JS مقارنةً try..catch
الكتل في Python.
ولكن ، على أي حال ، يمكن إجراء معالجة الأخطاء في برنامج نصي للمستخدم ، يتم استدعاؤه من وظيفة مكتبة ، ويتم اعتراضه في التعليمات البرمجية الرئيسية.
في مثال MyException
التالي ، سنقوم بتحديد MyException
، MyException
في دالة ، ونرى كيفية الإمساك به والتعامل معه في MyException
:
class MyException(Exception): def __init__(self, message): self.message = message def __str__(self): return self.message def proceed(): raise MyException('Error happened!') try: proceed() except MyException as err: print('Sorry! {}'.format(err)) finally: print('Finishing')
يفعل كود JS التالي نفس الشيء - نحدد فئة MyException
، MyException
في دالة ، try..catch..finally
في محاولة .. try..catch..finally
function MyException(message) { this.message = message; this.toString = function() { return this.message; } } function proceed() { throw new MyException('Error happened!'); } try { proceed(); } catch (err) { if (err instanceof MyException) { console.log('Sorry! ' + err); } } finally { console.log('Finishing'); }
في كلتا اللغتين ، MyException
فئة MyException
على معلمة رسالة وأسلوب لتمثيل السلسلة اعتمادًا على قيمة message
.
بالطبع ، يجب طرح / رفع الاستثناءات فقط في حالة حدوث خطأ. وإذا كنت قد حددت هذا الخطأ في وحدتك.
الاستنتاجات
- التسلسل من / إلى JSON واضح إلى حد ما - ما هو في Python ، وما هو في JS.
- Regulars هي أداة قوية لمعالجة الكلمات باللغتين.
- يمكنك إجراء الاستبدالات باستخدام الوظائف.
- بالنسبة للحالات الأكثر تعقيدًا ، يمكنك استخدام المكالمات والاعتراض ومعالجة الأخطاء.
كما قيل في المرة السابقة ، يمكنك مطابقة أمثلة التعليمات البرمجية المقدمة هنا لفهم كل سطر على حدة لفهم هياكل البيانات المتشابهة وطرق العمل معها: السلاسل والمصفوفات والقواميس والوصول إلى الكائنات.
في الجزء التالي ، سنتحدث عن أنماط النص وقوائم التفريغ ووظائف لامدا والتكرارات دون استخدام الفهارس والمولدات والمجموعات.