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

دليل الأساسيات لـ Python

تحكم العمليات في Python

الوظائف في Python

أنواع البيانات في Python

عمليات ملفات Python

أجسام وكلات Python

التاريخ والوقت في Python

معرفة متقدمة بـ Python

دليل Python

استخدام طريقة format() الخاصة بـ Python للتنسيق والشرح بالأمثلة.

وظائف النصوص بايثون

طريقة format() الخاصة بـ Python لتشكيل القيم المحددة وإدراجها في الفواصل المخصصة في النص.
يُستخدم المكان الحالي باستخدام accolades {}، يرجى الرجوع إلى قسم "المكان الحالي" للحصول على معلومات إضافية حول الملاكمة.
يستعيد طريقة format() النص المتنسيق.

نموذج طريقة format() هو:

template.format(p0, p1, ..., k0=v0, k1=v1, ...)

في هذا السياق، p0، p1،... هي معاملات موقعة وk0، k1،... هي معاملات كلمات مفتاحية تحتوي على قيم v0، v1،....

و، تمزج template من رموز النمط ومكامن التوضيح.

معاملات نص format()

يأخذ طريقة format() عدد غير محدود من المعاملات. ولكن يتم تقسيمها إلى نوعين من المعاملات:

  • معاملات موقعة - يمكن الوصول إلى المعاملات باستخدام مؤشر المعامل في accolades {index}

  • معاملات كلمات مفتاحية - قائمة بالمعاملات من نوع "مفتاح=قيمة" يمكن الوصول إليها باستخدام مفتاح المعامل في accolades {key}

يستعيد نص format() قيمته

يستعيد طريقة format() النص المتنسيق.

كيف يعمل format()؟

يقرأ format() نوع المعاملات التي يتم تمريرها له، ويقوم بتنسيقها بناءً على رموز النمط المحددة في النص.

بالنسبة للمعاملات الموقعة

في هذا السياق، المعامل 0 هو النص "Adam"، المعامل 1 هو عدد عشري 230.2346.

ملاحظة: في Python، تبدأ قائمة المعاملات من 0.

النص "Hello {0}, your balance is {1:9.3f}" هو نموذج نصي. يحتوي على رموز نمط للاستخدام في الت-format.

المثلثات الهوائية هي مجرد ملاكمة للمعلومات التي سيتم وضعها. في المثال السابق، {0} هو ملاكمة "Adam"، {1:9.3f} هي ملاكمة 230.2346.

بسبب أن نماذج النصوص تشير إلى معاملات format() مثل {0} و {1}، لذا تكون هذه المعاملات معاملات موقعة. يمكن أيضًا تسميتها دون أرقام لأن {} وPython يقومون بتحويلها إلى أرقام داخليًا.

في الداخل،

  • بسبب أن "Adam" هو الرقم الـ0 عددالمعامل، لذا يتم وضعها في موقعه {0}. لأن {0} لا يحتوي على أي رموز نمط أخرى، لذا لا يقوم بأي عملية أخرى.

  • مع ذلك، فإن أول معامل 230.2346 ليس من هذا النوع. هنا، {1:9.3f} يضع 230.2346 في موقعه ويقوم بعملية 9.3f.

  • يُستخدم f لتحديد النمط الذي يتم معالجته كعدد عشري. إذا لم يتم تحديد بشكل صحيح، سيتم إصدار خطأ.

  • جزء من قبل “.”. أقل عرض ممكن/ملء للعدد المحدد (230.2346). في هذه الحالة، يتم تخصيص 230.2346 على الأقل 9 مواضع، بما في ذلك “.”.
    إذا لم يتم تحديد خيار التوجيه، يتم توجيهه إلى اليمين من اليمين من المسافات الفارغة. (بالنسبة للنصوص، يتم توجيهها إلى اليسار.)

  • بعد النقطة (3) يتم قطع جزء العدد العشري (2346) إلى عدد محدد. في هذا الحالة، سيتم قطع 2346 بعد 3346.
    سيتم تقريب الرقم المتبقي (46) إلى 235.

بالنسبة للمعلمات المفتاحية

استخدمنا نفس المثال من فوق لعرض الفرق بين المعلمات المفتاحية والمعلمات المحددة بالموضع.

في هذا السياق، نستخدم ليس فقط المعلمات، بل أيضًا مفتاح القيمة كمعلمات. أي name="آدم" و blc=230.2346.

بسبب أن هذه المعلمات تُستدل إليها بواسطة مفتاحها كـ {name} و {blc:9.3f}، يتم تسميتها بـ المعلمات المفتاحية أو المعلمات المسماة.

في الداخل،

  • تم استبدال علامة الاستبدال {name} بالقيمة - "آدم". لأنها لا تحتوي على أي شيفرة تنسيق أخرى، تم وضع "آدم".

  • بالنسبة للمعلمة blc = 230.2346، يتم استبدال علامة الاستبدال {blc:9.3f} بالقيمة 230.2346. ولكن قبل استبداله، يتم تنفيذه 9.3f كما في مثال سابق.
    الخروج 230.235. يتم قطع جزء العدد العشري بعد 3 أرقام، ويتم تقريب الباقي. كما يتم توزيع عرض النص على 9 أرقام، مع بقاء مسافة 2 من الفضاء في اليسار.

تنسيق format() الأساسي

يسمح لـ format() باستخدام علامات الاستبدال البسيطة للتنسيق.

مثال 1: تنسيق الأساسيات للمعلمات الافتراضية، المحددة بالموضع والكلمات المفتاحية

# معلمات افتراضية
print("مرحبًا {}, رصيدك هو {}.".format("آدم"، 230.2346))
# معلمات مواضع
print("مرحبًا {0}، رصيدك هو {1}.".format("آدم"، 230.2346))
# معلمات مفتاحية
print("مرحبًا {name}، رصيدك هو {blc}.".format(name="آدم"، blc=230.2346))
# معلمات مختلطة
print("مرحبًا {0}، رصيدك هو {blc}.".format("آدم"، blc=230.2346))

عند تشغيل هذا البرنامج، جميع الخروجات ستكون متشابهة:

مرحبًا، آدم، رصيدك هو 230.2346.
مرحبًا، آدم، رصيدك هو 230.2346.
مرحبًا، آدم، رصيدك هو 230.2346.
مرحبًا، آدم، رصيدك هو 230.2346.

ملاحظة:بالنسبة للمعلمات المختلطة، يجب دائمًا أن يتبع المعلمات المحددة بالكلمات المفتاحية المعلمات المحددة بالمواضع.

استخدام format() لتشكيل الرقم

يمكنك استخدام علامات التوثيق التالية لضبط تنسيق الرقم:

نوع تنسيق الرقم
نوعمعنى
دعدد عشري صحيح
كحرف يوناني مرتبط به
بنظام الت编码 الثنائي
oالتنسيق الثماني
xالتنسيق السداسي (صغير x)
Xالتنسيق السداسي (كبير X)
nمثل “d”. باستثناء استخدام علامة الفصل بين الأرقام في إعدادات اللغة المحلية الحالية
eالتمثيل بالأساس (حرف صغير e)
Eعلامة الأساس (كبيرة E)
fالرقم الثابت (الافتراضية: 6)
Fمثل “f”. باستثناء عرض “inf” كـ “INF” و “nan” كـ “NAN”
gالتنسيق العام. قم بتقريب الرقم إلى p أرقام فعالة. (الدقة الافتراضية: 6)
Gمثل “g”. إذا كان العدد كبيرًا، يتم التبديل إلى “E”.
%النسبة المئوية. ضعفها وأضف % في النهاية.

مثال 2: تنسيق الأعداد البسيط

# معامل الأعداد الصحيحة
print("العدد: {:d}".format(123))
# معامل الأعداد العشرية
print("الأعداد العشرية: {:f}".format(123.4567898))
# تنسيق ثنائي، عشري وثماني
print("bin: {0:b}, oct: {0:o}, hex: {0:x}".format(12))

当你运行该程序时,输出将是:

العدد: 123
الأعداد العشرية: 123.456790
bin: 1100، oct: 14، hex: c

مثال 3: تعبئة الأعداد باستخدام int و float

# أوسع مساحة صحيحة
print("{:5d}".format(12))
# عرض لا يؤثر على الأعداد التي تكون أطول من التعبئة
print("{:2d}".format(1234))
# تعبئة الأعداد العشرية
print("{:8.3f}".format(12.2346))
# أوسع مساحة صفرية للأعداد الصحيحة
print("{:05d}".format(12))
# تعبئة الأعداد العشرية باستخدام الصفر
print("{:08.3f}".format(12.2346))

当你运行该程序时,输出将是:

   121234   12.235000120012.235

هنا،

  • في الجملة الأولى،{:5d} يستخدم معامل صحيح ويحدد أوسع مساحة 5. لأنه لم يتم تحديد طريقة التوجيه، يتم توجيهه إلى اليمين.

  • في الجملة الثانية، يمكنك رؤية أن عرضه (2) أقل من الرقم (1234)، لذا لا يحتاج إلى ترك أي مساحة على اليسار، ولا يقوم بتقسيم الرقم.

  • مختلفة عن الأعداد الصحيحة، الأعداد العشرية تحتوي على جزء صحيح وجزء عشري. ويتم تعريف أوسع جزء كامل بما في ذلك “.” من كلا الجزأين.

  • في الجملة الثالثة،{:8.3f} تقوم بقطع جزء العدد العشري إلى 3 أرقام، وتقوم بتقريب الأرقام الأخيرة. كما أن هذا الرقم الآن هو 12.235، وعرضه الكلي هو 8، ويتم الاحتفاظ بـ 2 مكانًا على اليسار.

  • إذا كنت ترغب في تعبئة المناطق المتبقية بالأصفار، فضع الصفر قبل مبدأ معرفة النمط. إنه ينطبق على الأعداد الصحيحة والأعداد العشرية: {:05d} و {:08.3f}.

مثال 4: تنسيق الأرقام المعدومة مع الإشارات

# عرض إشارة +
print("{:+f} {:+f}".format(12.23, -12.23))
# عرض فقط إشارة -
print("{:-f} {:-f}".format(12.23, -12.23))
# مسافة空 لعرض إشارة +
print("{: f} {: f}".format(12.23, -12.23))

当你运行该程序时,输出将是:

+12.230000 -12.230000
12.230000 -12.230000 12.230000 -12.230000

تنسيق أرقام

عند تحديد عرض معين للأرقام، يستخدم العلامات < و & و ^ لتنسيق

تنسيق أرقام
نوعمعنى
<تنسق الباقي يسار
^تنسق الباقي مركزي
>تنسق الباقي إلى اليمين
=إجبار إشارة الإيجابية ( +) أو السلبية (-) على اليسار أقصى

مثال 5: تنسيق الأرقام بالتوجيه اليمنى واليسرى والمركزي

# عدد صحيح يمين
print("{:5d}".format(12))
# عدد عشري مركزي
print("{:^10.3f}".format(12.2346))
# عدد صحيح يسار، ملأ بالصفر
print("{:<05d}".format(12))
# عدد عشري مركزي
print("{:=8.3f}".format(-12.2346))

当你运行该程序时,输出将是:

   12  12.235  12000- 12.235

ملاحظة:في المثال الثالث، قد يؤدي استخدام صفر الملء للعدد إلى مشكلة، حيث يعود المثال إلى 12000 بدلاً من 12.

استخدام format() لتنسيق النص

كرقم، يمكنك استخدام format() لتنسيق النص بنفس الطريقة.

مثال 6: تنسيق النص مع الملء والتوجيه

# نص ملأ بالطريقة اليسرى
print("{:5}".format("cat"))
# نص ملأ بالطريقة اليمنى
print("{:>5}".format("cat"))
# نص ملأ بالطريقة المركزية
print("{:^5}".format("cat"))
# نص ملأ بالطريقة المركزية
# و * و * استخدم حرف الملء
print("{:*^5}".format("cat"))

当你运行该程序时,输出将是:

cat  cat cat *cat*

مثال 7: تقاطع النص باستخدام format()

# 将字符串截断为3个字母
print("{:.3}".format("caterpillar"))
# 将字符串截断为3个字母
# 和 填充
print("{:5.3}".format("caterpillar"))
# 将字符串截断为3个字母,
# 填充和中心对齐
print("{:^5.3}".format("caterpillar"))

当你运行该程序时,输出将是:

catcat cat

使用format()格式化类和字典成员

Python内部getattr()以“ .age”形式用于类成员。并且,它使用__getitem__()查找“[index]”形式的字典成员。

示例8:使用format()格式化类成员

# define Person class
class Person:
    age = 23
    name = "Adam"
# 格式化age
print("{p.name}'年龄是 : {p.age}".format(p=Person()))

当你运行该程序时,输出将是:

Adam's 年龄是 : 23

在这里,Person对象作为关键字参数p传递。

在模板字符串中,分别使用.name和.age访问Person的name和age。

示例9:使用format()格式化字典成员

# 定义Person字典
person = {'age': 23, 'name': 'Adam'}
# 格式化age
print("{p[name]}'s age is: {p[age]}".format(p=person))

当你运行该程序时,输出将是:

Adam's age is: 23

与class类似,person字典作为关键字参数p传递。

在模板字符串中,分别使用[name]和[age]访问人员的name和age。

有一种更简单的方法可以使用Python格式化字典str.format(**mapping)。

# 定义Person字典
person = {'age': 23, 'name': 'Adam'}
# 格式化age
print("{name}'s age is: {age}".format(**person))

** 是格式参数(最小字段宽度)。

使用format()作为格式代码的参数

您还可以动态传递格式代码,例如精度,对齐,填充字符作为位置或关键字参数。

示例10:使用format()的动态格式化

# 动态字符串格式模板
string = "{:{fill}{align}{width}}"
#  نقل كود التنسيق كمعامل
print(string.format('cat', fill='*', align='^', width=5))
#  قالب تنسيق نقدي ديناميكي
num = '{:{align}{width}.{precision}f}"
#  نقل كود التنسيق كمعامل
print(num.format(123.236, align='<', width=8, precision=2))

عند تشغيل هذا البرنامج،الإخراج يكون:

**cat**123.24

هنا،

  • في المثال الأول، "cat" هو المعامل الموضع. وبالمثل، fill='*'، align='^' و width=5 هي معاملات كلمات رئيسية.

  • في النص النمطي، هذه الكلمات الرئيسية ليست كعناصر نصية عادية للطباعة بل ككود تنسيق يتم استرجاعه كـ fill, align و width.
    سيتم استبدال المعاملين بتنسيقهم المقابل، وسيتم تعيين النص "cat" بشكل مناسب.

  • بالمثل، في المثال الثاني، 123.236 هو معامل موقع، و align، width و precision يتم نقلها ككود تنسيق إلى النص النمطي.

خيارات تنسيق أخرى مع format()

يدعم format() خيارات تنسيق خاصة بالنوع، مثل تنسيق تاريخ الوقت وأعداد المركبة.

يتم استدعاء __format__() داخل format() من datetime، و format() يصل إلى خصائص المركب.

يمكنك بسهولة تعديل أي طريقة __format__() الخاصة بالعنصر لتنفيذ تنسيق مخصص.

مثال 11: استخدام format() و تعديل __format__() للتنسيق الخاص بالنوع

import datetime
#  تنسيق تاريخ الوقت
date = datetime.datetime.now()
print("الوقت الحالي: {:%Y/%m/%d %H:%M:%S}".format(date))
#  تنسيق الأعداد المركبة
complexNumber = 1+2j
print("جزء الحقيقي: {0.real} و جزء المجرد: {0.imag}".format(complexNumber))
#  تعريف  __format__()
class Person:
    def __format__(self, format):
        if(format == 'age'):
            return '23'
        return 'None'
print("عمر آدم هو: {:age}".format(Person()))

عند تشغيل هذا البرنامج،الإخراج يكون:

الوقت الحالي: 2020/04/17 14:33:02
جزء الحقيقي: 1.0 و الجزء المركب: 2.0
عمر آدم هو: 23

هنا،

  • بالنسبة لـ datetime:
    التاريخ الحالي والوقت كمعامل نقل لـ method format().
    وفي الداخل،يستخدم __format__،يمكن لـ format() الوصول إلى السنة،الشهر،اليوم،الساعة،الدقيقة والثانية.

  • بالنسبة للعدد المركب:
    1 + 2j يتم تحويله داخليًا إلى عنصر ComplexNumber.
    ثم زيارة خصائص real و imag،سيتم تكوين الرقم.

  • إعادة كتابة __format__
    مثل datetime،يمكنك إعادة كتابة __format__ الخاص بك لتحقيق تكوين مخصص،عند الوصول إلى {age}،سيقوم التكوين بإرجاع العمر

يمكنك أيضًا استخدام وظائف __str__ و __repr__ للفئات،من خلال استخدام طريقة التعبير القصير لـ format().

مثل __format__،يمكنك بسهولة إعادة كتابة __str__ و __repr__ للفئات.

مثال12:استخدام __str()__ و __repr()__ بإختصار via format() كـ !r و !s

# __str__() و __repr__() بإختصار !r و !s
print("Quotes: {0!r}،بدون أسئلة: {0!s}".format("cat"))
# __str__() و __repr__() لتحقيق الفئة
class Person:
    def __str__(self):
        return "STR"
    def __repr__(self):
        return "REPR"
print("repr: {p!r}،str: {p!s}".format(p=Person()))

عند تشغيل هذا البرنامج،الإخراج يكون:

الأسئلة: 'cat'،بدون أسئلة: cat
repr: REPR،str: STR

وظائف النصوص بايثون