English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

شرح مفصل لـstr.format في Python

مقدمة

أضاف Python في إصدار 2.6 طريقة جديدة لتشكيل النصوص: str.format(). لقد تم تشكيل جملته الأساسية باستخدام {} و : لتحل محل %. السابق.

نظام نصائح الترميز عند التشكيل:

replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"

قاعدة "التحويل"

من خلال الموقع

str.format() يمكنه استقبال عدد غير محدود من المعلمات، والترتيب ليس بحاجة إلى الالتزام بالترتيب:

>> "{0} {1}".format("hello", "world")
"hello world"
>> "{} {}".format("hello", "world")
"hello world"
>> "{} {}".format("hello", "world")
'world hello world'

بالمعلمات الرئيسية

عند استخدام المعلمات الرئيسية، يجب تقديم أسماء المعلمات في النص:

>>> "I am {name}, age is {age}".format(name="huoty", age=18)
'I am huoty, age is 18'
>>> user = {"name": "huoty", "age": 18}
>>> "I am {name}, age is {age}".format(**user)
'I am huoty, age is 18'

بالخصائص الخاصة بالمستخدم

str.format() يمكنها قراءة خصائص المستخدم مباشرة:

>>> class User(object):
...  def __init__(self, name, age):
...   self.name = name
...   self.age = age
...   
...  def __str__(self):
...   return "{self.name}({self.age})".format(self=self)
...  
...  def __repr__(self):
...   return self.__str__()
...  
...
>>> user = User("huoty", 18)
>>> user
huoty(18)
>>> "I am {user.name}, age is {user.age}".format(user=user)
'I am huoty, age is 18'

بالنمط

يمكن الوصول إلى العناصر عبر الأنماط داخل النص المفومت:

>>> names, ages = ["huoty", "esenich", "anan"], [18, 16, 8]
>>> "I am {0[0]}, age is {1[2]}".format(names, ages)
'I am huoty, age is 8'
>>> users = {"names": ["huoty", "esenich", "anan"], "ages": [18, 16, 8]}
>>> "I am {names[0]}, age is {ages[0]}".format(**users)

تحديد التحويل

يمكن تحديد نوع تحويل النص:

 conversion ::="r" | "s" | "a"

حيث "!r" يُ对应 repr()؛ "!s" يُ对应 str(); "!a" يُ对应 ascii(). مثال: }}

>> "repr() يظهر الأقواس: {!r}; str() لا يفعل: {!s}".format('test1', 'test2')
"repr() يظهر الأقواس: 'test1'; str() لا يفعل: test2"

محددات التنسيق

التعبئة والتوجيه

يُستخدم التعبئة غالبًا مع التوجيه. ^، <، > هي مركزية، يسار، يمين على التوالي، ويتبعها عرض، : يتبعه رمز التعبئة، يمكن أن يكون فقط رمزًا واحدًا، وإذا لم يُحدد، فإنه يتم تعبئته بشكل افتراضي باستخدام الفراغات.

>> "{:>8}".format("181716")
' 181716'
>> "{:0>8}".format("181716")
'00181716'
>> "{:->8}".format("181716")
'--181716'
>> "{:-<8}".format("181716")
'181716--'
>> "{:-^8}".format("181716")
-181716-
>> "{:-<25}>".format("Here ")
'Here -------------------->'

دقة العدد العشري

يُمكن استخدام f لتمثيل النوع العشري، ويمكن إضافة تحكم في الدقة قبلها:

>> "[ {:.2f} ]".format(321.33345)
>> "[ 321.33 ]"
>> "[ {:.1f} ]".format(321.33345)
>> "[ 321.3 ]"
>> "[ {:.4f} ]".format(321.33345)
>> "[ 321.3335 ]"
>> "[ {:.4f} ]".format(321)
'[ 321.0000 ]'

يمكن تحديد الرمز للعدد العشري، + لعرض + أمام الأرقام الإيجابية، - أمام الأرقام السلبية؛ (مسافة) لوضع مسافة أمام الأرقام الإيجابية، و - أمام الأرقام السلبية؛ - مع عدم وجود شيء آخر ({{:f}}) متشابه:

>> '{:+f}; {:+f}'.format(3.141592657, -3.141592657)
+3.141593; -3.141593'
>> '{: f}; {: f}'.format(3.141592657, -3.141592657)
' 3.141593; -3.141593'
>>> '{:f}; {:f}'.format(3.141592657, -3.141592657)
'3.141593; -3.141593'
>>> '{:-f}; {:-f}'.format(3.141592657, -3.141592657)
'3.141593; -3.141593'
>>> '{:+.4f}; {:+.4f}'.format(3.141592657, -3.141592657)
+3.1416; -3.1416

تحديد النظام العددي

>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(18)
'int: 18; hex: 12; oct: 22; bin: 10010'
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(18)
'int: 18; hex: 0x12; oct: 0o22; bin: 0b10010'

حرف فصل الأرقام العشرية

يمكن استخدام "," كحرف فصل للأرقام العشرية:

>>> '{:,}'.format(1234567890)
'1,234,567,890'

عرض النسبة المئوية

>>> "progress: {:.2%}".format(19.88/22)
'progress: 90.36%'

في الواقع، يدعم format أيضًا أنواعًا إضافية من الرموز:

type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

نصائح أخرى

النصائص المدمجة

في بعض الأحيان يمكن أن تكون النصائص المدمجة مفيدة جدًا:

>>> '{0:{fill}{align}16}'.format("hello", fill='*', align='^')
'*****hello******'
>>>
>>> for num in range(5,12):
...  for base in "dXob":
...   print("{0:{width}{base}}".format(num, base=base, width=5), end=' ')
...  print()
...  
...
 5  5  5  101
 6  6  6  110
 7  7  7  111
 8  8  10  1000
 9  9  11  1001
 10  A  12  1010
 11  B  13  1011

استخدامها كوظيفة

يمكنك أولاً عدم تحديد معاملات الترميز، ولكن استدعاءها كوظيفة في مكان لا تحتاجه:

>>> email_f = "Your email address was {email}".format
>>> print(email_f(email="[email protected]"))
عنوان بريدك الإلكتروني كان [email protected]

الهروب من الأقواس الكبيرة

عندما تحتاج إلى استخدام الأقواس الكبيرة في النص، يمكنك استخدام الأقواس الكبيرة للهروب:

>>> " The {} set is often represented as { {0} } ".format("empty")
غالبًا ما يتم تمثيل المجموعة الفارغة كـ {0}

الخاتمة

هذا هو نهاية محتوى هذا المقال، نأمل أن تكون محتويات هذا المقال قد ساعدتكم في التعلم أو العمل، إذا كان لديكم أي أسئلة، يمكنكم ترك تعليقات للتفاعل، شكرًا لدعمكم لتعليمات النفخ.

البيان: محتويات هذا المقال تم جمعها من الإنترنت، حقوق النشر تخص المالك الأصلي، المحتويات تم إدراجها من قبل المستخدمين عبر الإنترنت، هذا الموقع لا يمتلك حقوق الملكية، لم يتم تعديل المحتويات بشكل يدوي، ولا يتحمل أي مسؤولية قانونية. إذا اكتشفتم محتوى مخالف لحقوق النشر، مرحبًا بكم في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) لتقديم الشكوى، يرجى تقديم الأدلة ذات الصلة، وإذا تم التحقق من صحة الشكوى، سيتم حذف المحتوى المزعوم فورًا.

أعجبك هذا