python حفاث الثعبان العديد من الطرق لتنسيق الوتر-هل الأقدم(هل سيكون) موقوف؟



ثعبان التصنيفات الأقل (4)

لدى بايثون ست طرق على الأقل لتنسيق سلسلة:

In [1]: world = "Earth"

# method 1a
In [2]: "Hello, %s" % world
Out[2]: 'Hello, Earth'

# method 1b
In [3]: "Hello, %(planet)s" % {"planet": world}
Out[3]: 'Hello, Earth'

# method 2a
In [4]: "Hello, {0}".format(world)
Out[4]: 'Hello, Earth'

# method 2b
In [5]: "Hello, {planet}".format(planet=world)
Out[5]: 'Hello, Earth'

# method 2c
In [6]: f"Hello, {world}"
Out[6]: 'Hello, Earth'

In [7]: from string import Template

# method 3
In [8]: Template("Hello, $planet").substitute(planet=world)
Out[8]: 'Hello, Earth'

لمحة تاريخية عن الطرق المختلفة:

  • لقد كان تنسيق printf -style موجودًا منذ بدايات Pythons
  • تم تقديم فئة Template في Python 2.4
  • تم تقديم طريقة format في Python 2.6
  • تم تقديم f strings في Python 3.6

أسئلتي هي:

  • هل تم إيقاف تنسيق printf -style أو هل سيتم إيقاف العمل به؟
  • في Template class ، هل تم إهمال طريقة substitute أو هل سيتم إهمالها؟ (أنا لا أتحدث عن safe_substitute ، والتي أفهم أنها توفر قدرات فريدة من نوعها)

أسئلة مماثلة ولماذا أعتقد أنها ليست مكررة:

  • تنسيق سلسلة Python:٪ vs. .format - يعامل الطريقتين 1 و 2 فقط ، ويسأل أيهما أفضل ؛ سؤالي هو بوضوح حول الإهمال في ضوء زن بيثون

  • خيارات تنسيق السلسلة: الإيجابيات والسلبيات - تعامل الطريقتين 1 أ و 1 ب فقط في السؤال ، 1 و 2 في الإجابة ، وكذلك لا شيء عن الإهمال

  • سلاسل نصية متقابلة مقابل سلاسل القالب - معظمها عن الطريقتين 1 و 3 ، ولا تتناول الإهمال

  • تشير تعبيرات صياغة السلاسل (Python) - الإجابة إلى أن المخطط '٪' الأصلي مخطط لإيقافه . ولكن ما الفرق بين المخطط المزمع إيقافه وانتظار الإيقاف والإيقاف الفعلي؟ والطريقة printf PendingDeprecationWarning لا ترفع حتى PendingDeprecationWarning ، فهل هذا حقا سوف يتم إهمال؟ هذه المشاركة قديمة أيضًا ، لذا قد تكون المعلومات قديمة.

انظر أيضا PEP 502: الاستيفاء السلسلة - مناقشة موسعة


Answer #1

لم يتم إهمال عامل التشغيل % لتنسيق السلسلة ، ولن يتم إزالته - على الرغم من الإجابات الأخرى.
في كل مرة يتم فيها رفع الموضوع على قائمة تطوير بايثون ، هناك جدل قوي حوله أفضل ، ولكن لا يوجد جدل حول ما إذا كان سيتم إزالة الطريقة الكلاسيكية - سوف يبقى. على الرغم من الإشارة إلى PEP 3101 ، فإن Python 3.1 قد حان وذهبت ، ولا يزال التنسيق % حولها.

البيانات الخاصة بالحفاظ على النمط الكلاسيكي واضحة: فهي بسيطة ، إنها سريعة ، وهي سريعة للقيام بالأشياء القصيرة. استخدام طريقة .format ليس دائمًا أكثر قابلية للقراءة - وبالكاد يستطيع أي شخص - حتى بين المطورين الأساسيين ، استخدام البنية الكاملة التي يوفرها .format دون الاضطرار إلى النظر إلى المرجع حتى في عام 2009 ، كان لدى أحد الرسائل رسائل مثل هذه: http://mail.python.org/pipermail/python-dev/2009-October/092529.html - http://mail.python.org/pipermail/python-dev/2009-October/092529.html هذا الموضوع بالكاد في القوائم منذ ذلك الحين.

تحديث 2016

في الإصدار الحالي لتطور Python (الذي سيصبح Python 3.6) ، توجد طريقة ثالثة من الاستيفاء الداخلي للسلسلة ، الموصوفة في PEP-0498 . ويحدد بادئة اقتباس جديدة f"" (إلى جانب u"" الحالي u"" ، و b"" و r"" ).

سيطلق بادئة سلسلة بواسطة f أسلوبًا على كائن السلسلة في وقت التشغيل ، والذي سيحدد تلقائيًا المتغيرات من النطاق الحالي في السلسلة:

>>> value = 80
>>> f'The value is {value}.'
'The value is 80.'

Answer #2

الأسلوب .format() جديد المقصود لاستبدال بناء جملة التنسيق % القديم. تم التخلي عن هذا الأخير (ولكن لم يتم إهماله رسمياً بعد ). يوضح وثائق الطريقة بقدر:

هذه الطريقة في تنسيق السلسلة هي المعيار الجديد في Python 3 ، ويجب أن تكون مفضلة للنسق الموضح في عمليات تنسيق السلسلة في التعليمة البرمجية الجديدة.

(التشديد لي).

للحفاظ على التوافق مع الإصدارات السابقة وجعل عملية النقل أكثر سهولة ، تم ترك التنسيق القديم في مكانه الآن . من اقتراح PEP 3101 الأصلي:

التوافق الوراء

يمكن الحفاظ على التوافق إلى الوراء عن طريق ترك الآليات الموجودة في المكان. لا يتصادم النظام الجديد مع أي من أسماء الطرق الخاصة بأساليب تنسيق السلسلة الموجودة ، بحيث يمكن أن يتواجد النظامان معاً حتى يحين وقت إهمال النظام القديم.

لاحظ أنه حتى يحين وقت إهمال النظام القديم ؛ لم يتم إهمالها ، لكن النظام الجديد سيستخدم عندما تكتب رمزًا جديدًا .

يتمتع النظام الجديد بميزة تمكنك من الجمع بين نهج tuple والقاموس لمنسق % القديم:

"{greeting}, {0}".format(world, greeting='Hello')

وهو قابل للتوسعة من خلال object.__format__() خطاف يستخدم في معالجة تنسيق القيم الفردية.

لاحظ أن النظام القديم لديه % وفئة Template ، حيث يسمح لك هذا الأخير بإنشاء فئات فرعية تضيف أو تغير سلوكها. يحتوي النظام الجديد على فئة Formatter لملء نفس المكان.

لقد ابتعدت بايثون 3 عن الإهمال ، وبدلاً من ذلك أعطيتك تحذيرًا في قسم تنسيق السلسلة بالطريقة printf :

ملاحظة : تعرض عمليات التنسيق الموصوفة هنا مجموعة متنوعة من المراوغات التي تؤدي إلى عدد من الأخطاء الشائعة (مثل عدم عرض المجموعات والحدود بشكل صحيح). استخدام القيم الحرفية سلسلة المنسقة الأحدث أو واجهة str.format() يساعد على تجنب هذه الأخطاء. توفر هذه البدائل أيضًا نُهجًا أكثر قوة ومرونة وقابلية للتوسعة لتنسيق النص.

كما أضاف Python 3.6 حرفية سلسلة منسقة ، والتي في سطر التعبيرات في صيغة السلاسل بتنسيق. هذه هي أسرع طريقة لإنشاء سلاسل ذات قيم str.format() ، ويجب استخدامها بدلاً من str.format() أينما يمكنك استخدام حرفية.


Answer #3

وبالنظر إلى وثائق Python القديمة و PEP 3101 ، كان هناك بيان بأن عامل التشغيل٪ سيتم إيقافه وإزالته من اللغة في المستقبل. البيان التالي كان في مستندات Python لـ Python 3.0 و 3.1 و 3.2:

نظرًا لأن str.format () جديد تمامًا ، فإن الكثير من شفرة Python لا تزال تستخدم عامل التشغيل٪. ومع ذلك ، نظرًا لأنه سيتم إزالة هذا النمط القديم من التنسيق من اللغة ، يجب استخدام str.format () بشكل عام.

إذا ذهبت إلى القسم نفسه في Python 3.3 و 3.4 docs ، فسترى إزالة هذا البيان. كما لا يمكنني العثور على أي بيان آخر في أي مكان آخر في الوثائق يشير إلى أنه سيتم استهلاك المشغل أو إزالته من اللغة. من المهم أيضًا ملاحظة أن PEP3101 لم يتم تعديله منذ أكثر من عامين ونصف (الجمعة ، 30 سبتمبر 2011).

تحديث

PEP461 إضافة تنسيق٪ إلى بايت و bytearray مقبولة ويجب أن تكون جزءًا من Python 3.5 أو 3.6. انها علامة أخرى على أن المشغل هو على قيد الحياة وركلة.


Answer #4

يبدو أن موقف غيدو الأخير حول هذا الأمر موضح هنا:

ما هو الجديد في Python 3.0

PEP 3101: نهج جديد لتنسيق السلاسل

نظام جديد لعمليات تنسيق سلسلة مضمن يستبدل عامل تنسيق سلسلة٪. (ومع ذلك ، فإن المشغل٪ لا يزال مدعومًا ؛ سيتم إيقافه في Python 3.1 وإزالته من اللغة في وقت لاحق.) اقرأ PEP 3101 للمجرد الكامل.

و PEP3101 نفسها ، التي لديها آخر تعديل يعود تاريخه إلى (الجمعة ، 30 سبتمبر 2011) ، لذلك لا يوجد تقدم في وقت متأخر على ذلك ، أفترض.





backwards-compatibility