Formatlaşdırmanın köhnə üsulu

Bildiyiniz kimi, Guido van Rossum Python dilini meydana gətirərkən C dilindən də müəyyən sintaksis konstruksiyaları götürmüşdür. C dilində isə sırf formatlı çıxışlar üçün nəzərdə tutulan xüsusi printf()sprintf() kimi funksiyalar vardır. Python dilinə həmin funksiyalar keçməsə də, onların funksionallığını təmin edən % (modul) operatorundan adi print() funksiyası daxilində istifadə etmək mümkündür. Modul (riyazi modul ilə qarışdırmayın) operatoruna çox vaxt sətir modulu və ya sətir interpolyasiyası da deyilir.
Aşağıdakı sxem sətir modulu operatorunun necə işlədiyini göstərir:

Yuxarıdakı yazılışdan da gördüyünüz kimi, print() funksiyasına bütöv olaraq ötürülən parametr əslində üç hissədən ibarətdir:

Burada qiymətlər kortejinin elementləri literal, dəyişən və ya ixtiyari riyazi ifadədən ibarət ola bilər. Kortejin elementləri placeholders (yerləşdirmə göstəriciləri) vasitəsilə sətir formatında öz yerlərinə qoyulur. Bizim nümunədə iki (%5d%8.2f) placeholder var.
Placeholderin yazılışının ümumi sintaksisi aşağıdakı kimidir:

%[bayraqlar][genişlik][.dəqiqlik]tip

Burada bayraqlar bəzi konversiya (çevrilmə) tiplərinin nəticəsinə təsir edən parametrlərdir. Bu konversiya parametrlərinin istifadəsi opsionaldır (istəyə bağlıdır). Aşağıdakı cədvəldə onlarla tanış ola bilərsiniz:

BayraqTəyinatı
#o, x və ya X spesifikatorları ilə istifadə edildiyi zaman çıxış qiymətlərinin önünə müvafiq olaraq 0, 0o, 0O, 0x və ya 0X simvolları əlavə edilir.
0Ədədi qiymətlər üçün konversiya nəticəsi ön məsafəsiz çıxır.
Konversiya nəticələri soldan nizamlanır.
+Ədədi qiymətlərdə istifadə edildiyi zaman onların işarəsi (“+” və ya “-“) konversiya nəticəsinin önündə göstərilir.
boşluqBayraq olaraq boşluq (probel) yazıldıqda müsbət çıxış qiymətlərinin önünə boşluq (probel) qoyulur.

Placeholderin yazılışında göstərilən genişlik ədədi qiymətlərdə çıxış veriləni üçün soldan sağa ayrılmış xanaların ümumi sayıdır. Əgər çıxış veriləni həqiqi ədəddirsə, vergüldən sonrakı rəqəmlərinin sayını bildirmək üçün dəqiqlik də göstərilməlidir:

Əgər çıxış qiymətində vergüldən sonrakı rəqəmlərin sayı onun üçün qeyd olunan dəqiqlikdən çoxdursa, yuvarlaqlaşdırma, azdırsa, sıfırlarla tamamlama baş verəcək.
Aşağıdakı cədvəldə isə placeholderdə göstərilə bilən tiplər verilmişdir:

KonversiyaTəyinatı
dÇıxışa işarəli onluq tam ədəd çıxarır.
iÇıxışa işarəli onluq tam ədəd çıxarır.
uÇıxışa işarəsiz onluq tam ədəd çıxarır.
oÇıxışa işarəsiz səkkizlik ədəd çıxarır.
xÇıxışa işarəsiz onaltılıq ədəd çıxarır (aşağı registr).
XÇıxışa işarəsiz onaltılıq ədəd çıxarır (yuxarı registr).
eÇıxışa eksponensial formatda həqiqi ədəd çıxarır (aşağı registr).
EÇıxışa eksponensial formatda həqiqi ədəd çıxarır (yuxarı registr).
fÇıxışa onluq həqiqi ədəd çıxarır.
FÇıxışa onluq həqiqi ədəd çıxarır.
gEksponent -4-dən böyük və ya dəqiqlikdən kiçik olduqda e,əks halda, f konversiyası ilə eynidir.
GEksponent -4-dən böyük və ya dəqiqlikdən kiçik olduqda E,əks halda, F konversiyası ilə eynidir.
cÇıxışa tək simvol çıxarır.
rÇıxışa sətir çıxarır. (istənilən Python obyektini repr() funksiyası ilə çevirir).
sÇıxışa sətir çıxarır (istənilən Python obyektini str() funksiyası ilə çevirir).
aÇıxışa sətir çıxarır (istənilən Python obyektini ascii() funksiyası ilə çevirir).
%Çıxışa yalnız % simvolunu çıxarır.

İndi isə gəlin bizim misaldakı placeholderləri nəzərdən keçirək:

>>> print("Məhsul kod:%5d, qiymət:%8.2f" % (254, 65.076))
Məhsul kod:  254, qiymət:   65.08
>>>

Burada birinci olan %5d placeholderi kortejin ilk elementi olan 254 qiymətini sətir formatında öz yerinə yerləşdirir. Bu zaman çıxış veriləni üçün beş xanalıq yer ayrılır və o işarəli onluq tam ədəd şəklində konversiya olunur. Diqqət edin ki, çıxış veriləni üçün beş yer ayrıldığı halda onun özü üç rəqəmlidir. Məhz buna görə də, bu qiymət çıxışa önündə iki boşluqla gəlir.
Misalda ikinci olan %8.2f placeholderinə gəlincə isə görmək olar ki, o 65.076 qiymətini onluq həqiqi ədəd şəklində konversiya edir. Çıxış veriləni üçün ümumilikdə səkkiz, vergüldən sonrakı rəqəmlər üçün (dəqiqlik) iki xanalıq yer ayrılır. Dəqiqlik üçün ayrılan xanaların sayı bir vahid az olduğuna görə çıxışda ədəd bir mövqe yuvarlaqlaşdırılır.
Aşağıda verilmiş digər nümunələri də nəzərdən keçirin:

>>> print("%10.3e"% (425.07875))
     4.251e+02
>>> print("%10o"% (17))
            21
>>> print("%5.4X"% (54))
     0036
>>> print("%c"% ('A'))
A
>>> print("%s"% ('alma'))
alma
>>> print("Yalnız faiz simvolu: %%" % ())
Yalnız faiz simvolu: %
>>>
>>> print("%#5X"% (78))
     0X4E
>>> print("%#5o"% (33))
     0o41
>>> print("%+d"% (47))
+47
>>> print("%0d"% (42))
42
>>> print("%-5d"% (86))
86   
>>> print("% d"% (27))
     27
>>>

İlk baxışdan elə görünsə də, əslində formatlaşdırma print() funksiyasının bir parçası deyildir. Yazdığımız misallara diqqətlə nəzər yetirsəniz, görəcəksiniz ki, bütün hallarda print() funksiyasına ötürülən parametr sətir modulu (%) operatoru ilə formatlaşdırılan sətirdir. Köhnə üsulla çıxışları formatlaşdırarkən biz aşağıdakı ardıcıllıqdan da istifadə edə bilərdik:

>>> s = "Məhsul kod:%5d, qiymət:%8.2f" % (254, 65.076)
>>> print(s)
Məhsul kod:  254, qiymət:   65.08
>>>