الفرق بين المراجعتين لصفحة: «Python/string/Template»

من موسوعة حسوب
< Python‏ | string
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:سلاسل القوالب في بايثون}}</noinclude> تقدّم القوالب طريقة أبسط لإجراء عمليات الاستب...'
 
ط استبدال النص - 'Python/string/Template/safe-substitute' ب'Python/string/Template/safe_substitute'
 
(7 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:سلاسل القوالب في بايثون}}</noinclude>
<noinclude>{{DISPLAYTITLE:سلاسل القوالب في بايثون}}</noinclude>
تقدّم القوالب طريقة أبسط لإجراء عمليات الاستبدال في السلاسل النصية الموصوفة في [https://www.python.org/dev/peps/pep-0292 PEP 292]. حيث يمكن إجراء عمليات الاستبدال باستخدام الرمز <code>$</code> بدلًا من الرمز <code>%</code>، وباتباع القواعد التالية:


تقدّم القوالب طريقة أبسط لإجراء عمليات الاستبدال في السلاسل النصية الموصوفة في PEP 292. حيث يمكن إجراء عمليات الاستبدال باستخدام الرمز $ بدلًا من الرمز %، وباتباع القواعد التالية:
* يعتبر التسلسل <code>$$</code> تسلسل تهريب، ويجري استبداله بعلامة <code>$</code> واحدة.
* تسمّي الصيغة ‎<code>$identifier</code> معرّفًا يحدّد موضعًا للاستبدال يطابق مفتاح ربط يحمل الاسم <code>"identifier"</code>. المعرّفات الصالحة هي تلك التي تتضمّن حروفًا وأرقامًا بترميز ASCII وتكون غير حساسة لحالة الأحرف، وتبدأ بشرطة سفلية أو أحد حروف الترميز ASCII. وينتهي اسم المحرّف عند أوّل حرف لا تنطبق عليه هذه القيود.
* الصيغة ‎<code>${identifier}‎</code> مكافئة للصيغة <code>‎$identifier</code>، وتُستخدم في الحالات التي يتضمّن فيها المعرّف حروفًا صالحة ولكنّها ليست جزءًا من اسم المعرّف مثل: ‎<code>"${noun}ification"‎</code>.


* يعتبر التسلسل $$ تسلسل تهريب، ويجري استبداله بعلامة $ واحدة.
يؤدي ظهور الرمز <code>$</code> في أي مكان آخر ضمن السلسلة النصية إلى إطلاق الخطأ <code>[[Python/built-in exceptions#ValueError|ValueError]]</code>.
* تسمّي الصيغة ‎$identifier معرّفًا يحدّد موضعًا للاستبدال يطابق مفتاح ربط يحمل الاسم "identifier". المعرّفات الصالحة هي تلك التي تتضمّن حروفًا وأرقامًا بترميز ASCII وتكون غير حساسة لحالة الأحرف، وتبدأ بشرطة سفلية أو أحد حروف الترميز ASCII. وينتهي اسم المحرّف عند أوّل حرف لا تنطبق عليه هذه القيود.
* الصيغة ‎${identifier}‎ مكافئة للصيغة ‎$identifier، وتُستخدم في الحالات التي يتضمّن فيها المعرّف حروفًا صالحة ولكنّها ليست جزءًا من اسم المعرّف مثل: ‎"${noun}ification"‎.


يؤدي ظهور الرمز $ في أي مكان آخر ضمن السلسلة النصية إلى إطلاق الخطأ ValueError.
تقدّم وحدة <code>string</code> الصنف <code>Template</code> الذي يستخدم القواعد الآنفة الذكر في عمله، ويدعم هذا الصنف خاصية واحدة وتابعين.
 
تقدّم وحدة string الصنف Template الذي يستخدم القواعد الآنفة الذكر في عمله، ويدعم هذا الصنف خاصية واحدة وتابعين.


== خاصية الصنف Template ==
== خاصية الصنف Template ==
=== <code>template</code> ===
=== <code>template</code> ===
تمثّل الكائن الممرّر كمعامل للتابع الباني للصنف Template، وعادة لا يجدر تغيير قيمة هذه الخاصية، ولكن ذلك ليس أمرًا إلزاميًا.
تمثّل الكائن الممرّر كمعامل للتابع الباني للصنف <code>Template</code>، وعادة لا يجدر تغيير قيمة هذه الخاصية، ولكن ذلك ليس أمرًا إلزاميًا.


== تابعا الصنف Template ==
== تابعا الصنف Template ==
سطر 19: سطر 18:
يقدّم الصنف <code>Template</code> التابعين التاليين:
يقدّم الصنف <code>Template</code> التابعين التاليين:


=== التابع <code>Template.substitue()‎</code> ===
=== <code>[[Python/string/Template/substitute|Template.substitute()]]‎</code> ===


يؤدي هذا التابع عملية الاستبدال بالاعتماد على القالب ويعيد سلسلة نصية جديدة.
يؤدي هذا التابع عملية الاستبدال بالاعتماد على القالب ويعيد سلسلة نصية جديدة.


=== التابع <code>Template.safe_substitue()‎</code> ===
=== <code>[[Python/string/Template/safe_substitute|Template.safe_substitute()]]‎</code> ===


هذا التابع مشابه للتابع السابق، باستثناء أنّه لا يطلق خطأً أو استثناءً عند حدوث مشكلة أثناء عملية الاستبدال.
هذا التابع مشابه للتابع السابق، باستثناء أنّه لا يطلق خطأً أو استثناءً عند حدوث مشكلة أثناء عملية الاستبدال.


== مصادر ==
== إعادة تعريف صيغة المعرّفات ==
يمكن [[Python/inhertance|اشتقاق أصناف فرعية]] من الصنف <code>Template</code> لتخصيص صيغة المعرّفات والفواصل أو [[Python/re|التعبير النمطي]] المستخدم لتفسير سلسلة القالب. وللقيام بذلك يمكن إعادة تعريف override خصائص الصنف التالية:
 
'''ملاحظة:''' راجع [[Python/re|(الوحدة re في بايثون)]] للاطلاع بصورة أوسع على التعابير النمطية وطريقة الاستفادة منها في بايثون.
 
<code>delimiter</code> - هذه هي السلسلة النصية التي تصف معرّفًا يتضمّن فاصلًا، والقيمة الافتراضية هي <code>$</code>. لاحظ أنّه يجب أن لا يكون الفاصل تعبيرًا نمطيًا، لأنّ الدالة <code>[[Python/re/escape|re.escape()]]</code>‎ ستُستدعى على هذه السلسلة النصية عند الحاجة.
 
<code>idpattern</code> - هذه الخاصية هي تعبير نمطي يصف النمط الخاص بالمعرّفات غير المحاطة بالأقواس المعقوفة (تضاف الأقواس المعقوفة تلقائيًا وحسب الحاجة). القيمة الافتراضية لهذه الخاصية هي التعبير النمطي: ‎<code>(?-i:[_a-zA-Z][_a-zA-Z0-9]*)</code>‎‎.
 
'''ملاحظة:''' نظرًا لكون الراية الافتراضية هي <code>re.IGNORECASE</code> فيمكن للنمط <code>[a-z]</code> أن يطابق بعض الحروف خارج نطاق الترميز ASCII. لذا أضيفت الراية ‎<code>-i</code> لاستخدام الإعدادات المحلية.
 
صحيح أنّ الإبقاء على الراية <code>re.IGNORECASE</code> هو لغرض التوافق مع الإصدارات السابقة، ولكن يمكن إعادة تعريف الراية إلى <code>0</code> أو <code>re.IGNORECASE | re.ASCII</code> عند إنشاء الأصناف الفرعية.
 
<code>flags</code> - الرايات التي ستُطبّق على التعبير النمطي عند إجراء عملية التصريف للتعرف على الاستبدالات، وتأخذ القيمة الافتراضية <code>re.IGNORECASE</code>. لاحظ أنّ الراية <code>re.VERBOSE</code> ستضاف إلى الرايات؛ لهذا يجب على الخاصية <code>idpatterns</code> أن تتبع الاصطلاحات الخاصة بالتعابير النمطية المفصّلة verbose.
 
'''ملاحظة''': جديد في الإصدار 3.2.


[https://docs.python.org/3/library/string.html#template-strings قسم Template Strings في صفحة Common String Operations في توثيق بايثون الرسمي].
بدلًا عمّا سبق، يمكن تقديم تعبير نمطي كامل وذلك بإعادة تعريف الخاصية <code>pattern</code>. وعند القيام بذلك، يجب تقديم كائن تعبير نمطي يتضمّن أربعة مجموعات التقاط ترتبط بالقواعد المبيّنة أعلاه، إلى جانب قاعدة التعرّف على المعرّفات غير الصالحة:
* <code>escaped</code>: تطابق هذه المجموعة تسلسل التهريب، مثل: <code>$$</code> في التعبير النمطي الافتراضي.
* <code>named</code>: تطابق هذه المجموعة اسم المعرّف غير المحاط بالأقواس المعقوفة، ويجب أن لا يكون هناك فاصل في مجموعة الالتقاط.
* <code>braced</code>: تطابق هذه المجموعة اسم المعرّف المحاط بالأقواس المعقوفة، ويجب أن لا يكون هناك فاصل ولا أقواس معقوفة في مجموعة الالتقاط.
* <code>invalid</code>: تطابق هذه المجموعة أنماط الفواصل الأخرى (عادة ما يكون فاصلًا مفردًا)، ويجب أن تكون في نهاية التعبير النمطي.


== مصادر ==
* [https://docs.python.org/3/library/string.html#template-strings قسم Template Strings في صفحة Common String Operations في توثيق بايثون الرسمي].
[[تصنيف: Python]]
[[تصنيف: Python]]
[[تصنيف: Python Modules]]
[[تصنيف: Python Modules]]
[[تصنيف:Python Template]]

المراجعة الحالية بتاريخ 06:10، 18 يونيو 2018

تقدّم القوالب طريقة أبسط لإجراء عمليات الاستبدال في السلاسل النصية الموصوفة في PEP 292. حيث يمكن إجراء عمليات الاستبدال باستخدام الرمز $ بدلًا من الرمز %، وباتباع القواعد التالية:

  • يعتبر التسلسل $$ تسلسل تهريب، ويجري استبداله بعلامة $ واحدة.
  • تسمّي الصيغة ‎$identifier معرّفًا يحدّد موضعًا للاستبدال يطابق مفتاح ربط يحمل الاسم "identifier". المعرّفات الصالحة هي تلك التي تتضمّن حروفًا وأرقامًا بترميز ASCII وتكون غير حساسة لحالة الأحرف، وتبدأ بشرطة سفلية أو أحد حروف الترميز ASCII. وينتهي اسم المحرّف عند أوّل حرف لا تنطبق عليه هذه القيود.
  • الصيغة ‎${identifier}‎ مكافئة للصيغة ‎$identifier، وتُستخدم في الحالات التي يتضمّن فيها المعرّف حروفًا صالحة ولكنّها ليست جزءًا من اسم المعرّف مثل: ‎"${noun}ification"‎.

يؤدي ظهور الرمز $ في أي مكان آخر ضمن السلسلة النصية إلى إطلاق الخطأ ValueError.

تقدّم وحدة string الصنف Template الذي يستخدم القواعد الآنفة الذكر في عمله، ويدعم هذا الصنف خاصية واحدة وتابعين.

خاصية الصنف Template

template

تمثّل الكائن الممرّر كمعامل للتابع الباني للصنف Template، وعادة لا يجدر تغيير قيمة هذه الخاصية، ولكن ذلك ليس أمرًا إلزاميًا.

تابعا الصنف Template

يقدّم الصنف Template التابعين التاليين:

Template.substitute()

يؤدي هذا التابع عملية الاستبدال بالاعتماد على القالب ويعيد سلسلة نصية جديدة.

Template.safe_substitute()

هذا التابع مشابه للتابع السابق، باستثناء أنّه لا يطلق خطأً أو استثناءً عند حدوث مشكلة أثناء عملية الاستبدال.

إعادة تعريف صيغة المعرّفات

يمكن اشتقاق أصناف فرعية من الصنف Template لتخصيص صيغة المعرّفات والفواصل أو التعبير النمطي المستخدم لتفسير سلسلة القالب. وللقيام بذلك يمكن إعادة تعريف override خصائص الصنف التالية:

ملاحظة: راجع (الوحدة re في بايثون) للاطلاع بصورة أوسع على التعابير النمطية وطريقة الاستفادة منها في بايثون.

delimiter - هذه هي السلسلة النصية التي تصف معرّفًا يتضمّن فاصلًا، والقيمة الافتراضية هي $. لاحظ أنّه يجب أن لا يكون الفاصل تعبيرًا نمطيًا، لأنّ الدالة re.escape()‎ ستُستدعى على هذه السلسلة النصية عند الحاجة.

idpattern - هذه الخاصية هي تعبير نمطي يصف النمط الخاص بالمعرّفات غير المحاطة بالأقواس المعقوفة (تضاف الأقواس المعقوفة تلقائيًا وحسب الحاجة). القيمة الافتراضية لهذه الخاصية هي التعبير النمطي: ‎(?-i:[_a-zA-Z][_a-zA-Z0-9]*)‎‎.

ملاحظة: نظرًا لكون الراية الافتراضية هي re.IGNORECASE فيمكن للنمط [a-z] أن يطابق بعض الحروف خارج نطاق الترميز ASCII. لذا أضيفت الراية ‎-i لاستخدام الإعدادات المحلية.

صحيح أنّ الإبقاء على الراية re.IGNORECASE هو لغرض التوافق مع الإصدارات السابقة، ولكن يمكن إعادة تعريف الراية إلى 0 أو re.IGNORECASE | re.ASCII عند إنشاء الأصناف الفرعية.

flags - الرايات التي ستُطبّق على التعبير النمطي عند إجراء عملية التصريف للتعرف على الاستبدالات، وتأخذ القيمة الافتراضية re.IGNORECASE. لاحظ أنّ الراية re.VERBOSE ستضاف إلى الرايات؛ لهذا يجب على الخاصية idpatterns أن تتبع الاصطلاحات الخاصة بالتعابير النمطية المفصّلة verbose.

ملاحظة: جديد في الإصدار 3.2.

بدلًا عمّا سبق، يمكن تقديم تعبير نمطي كامل وذلك بإعادة تعريف الخاصية pattern. وعند القيام بذلك، يجب تقديم كائن تعبير نمطي يتضمّن أربعة مجموعات التقاط ترتبط بالقواعد المبيّنة أعلاه، إلى جانب قاعدة التعرّف على المعرّفات غير الصالحة:

  • escaped: تطابق هذه المجموعة تسلسل التهريب، مثل: $$ في التعبير النمطي الافتراضي.
  • named: تطابق هذه المجموعة اسم المعرّف غير المحاط بالأقواس المعقوفة، ويجب أن لا يكون هناك فاصل في مجموعة الالتقاط.
  • braced: تطابق هذه المجموعة اسم المعرّف المحاط بالأقواس المعقوفة، ويجب أن لا يكون هناك فاصل ولا أقواس معقوفة في مجموعة الالتقاط.
  • invalid: تطابق هذه المجموعة أنماط الفواصل الأخرى (عادة ما يكون فاصلًا مفردًا)، ويجب أن تكون في نهاية التعبير النمطي.

مصادر