Buraya kadar değerleri yazdırmanın iki yolunu gördük: deyim ifadeleri ve
print deyimi. Üçüncü bir yol da dosya nesnelerinin write()
yöntemidir. Standart çıktıya sys.stdout şeklinde atıfta
bulunulabilir.
Çoğu zaman boşluklar ile birbirinden ayrılmış değerlerden daha iyi
biçimlendirilimiş bir çıktıya ihtiyaç duyulur. Çıktınızı biçimlendirmenin
iki yolu var. İlki bütün dizge işlemlerini dilimleme ve birleştirme ile
yapıp istediğiniz herhangi bir biçimi elde etmek. string
standart modülü dizgelerin istenen sütun genişliğine kadar
boşluklar ile doldurulmasını sağlayan, daha sonra değineceğimiz, bazı
faydalı işlevlere sahiptir. İkinci yol ise sol argümanı bir dizge olan
% işlecini kullanmaktır. % işleci
sol argümanını sağdaki argümanına uygulanacak sprintf()
tarzı biçim dizgesi olarak yorumlar ve biçimleme işleminden sonra bir
dizge geri döndürür.
Sayısal değerleri dizgeye çevirmek için ise değer repr()
veya str() işlevine geçirilebilir ya da ters tırnak işareti
(``) içine alınabilir (repr() ile
aynı etkiye sahiptir).
str() işlevi değerlerin insan tarafından okunabilir
gösterimini geri döndürürken, repr() işlevi yorumlayıcı
tarafından okunabilir gösterimini geri döndürür (veya uygun sözdizim yok
ise SyntaxError istisnası oluşturur). İnsan için anlam
ifade edecek bir gösterimi bulunmayan nesneler için str()
işlevi repr() ile aynı değeri döndürür. Rakamlar, listeler
ve sözlükler gibi yapılar ile daha pek çok değer için her iki işlev de aynı
sonucu verir. Dizgeler ve gerçel sayılar ise iki farklı gösterime sahiptir.
İşte birkaç örnek:
>>> s = 'Hello, world.'
>>> str(s)
'Hello, world.'
>>> `s`
"'Hello, world.'"
>>> str(0.1)
'0.1'
>>> `0.1`
'0.10000000000000001'
>>> x = 10 * 3.25
>>> y = 200 * 200
>>> s = 'The value of x is ' + `x` + ', and y is ' + `y` + '...'
>>> print s
The value of x is 32.5, and y is 40000...
>>> # Ters tırnaklar sayılar dışındaki tipler ile de çalışır:
... p = [x, y]
>>> ps = repr(p)
>>> ps
'[32.5, 40000]'
>>> # Karakter dizisinde ise tırnaklar ve ters bölü işareti eklenir:
... hello = 'hello, world\n'
>>> hellos = `hello`
>>> print hellos
'hello, world\n'
>>> # Ters tırnakların argümanı bir demet de olabilir:
... `x, y, ('spam', 'eggs')`
"(32.5, 40000, ('spam', 'eggs'))"
Sayıların kare ve küplerinden oluşan bir tablo yazdırmanın iki yolu
vardır:
>>> import string
>>> for x in range(1, 11):
... print string.rjust(`x`, 2), string.rjust(`x*x`, 3),
... # Üst satırın sonundaki virgüle dikkat edin.
... print string.rjust(`x*x*x`, 4)
...
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
>>> for x in range(1,11):
... print '%2d %3d %4d' % (x, x*x, x*x*x)
...
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
Sütunların arasındaki bir karakterlik boşluk print
tarafından eklenir; argümanların arasına daima bir boşluk karakteri
eklenir.
Bu örnek dizgelerin başını boşluklar ile doldurup bunları sağ tarafa
dayayan string.rjust() işlevini kullanmaktadır.
Buna benzer string.ljust() ve
string.center() işlevleri de vardır. Bunlar bir şey
yazdırmaz; sadece yeni bir dizge geri döndürürler. Verilen
dizge uzun ise kırpılmaz ve aynen geri döndürülür; bu
sütunlarınızın bozulmasına sebep olmasına rağmen hatalı bir değer
göstermekten iyidir. Büyük bir değeri kırpmayı gerçekten istiyorsanız
dilimleme ile bunu yapabilirsiniz (string.ljust(x, n)[0:n]
gibi).
string.zfill() işlevi ise rakamlar içeren dizgelerin
başını sıfırlar ile doldurur. Bu işlev artı ve eksi işaretlerini de
dikkate alır:
>>> import string
>>> string.zfill('12', 5)
'00012'
>>> string.zfill('-3.14', 7)
'-003.14'
>>> string.zfill('3.14159265359', 5)
'3.14159265359'
% işleçi şu şekilde kullanılır:
>>> import math
>>> print 'PI sayısının yaklaşık değeri: %5.3f' % math.pi
PI sayısının yaklaşık değeri: 3.142
Dizgenin içinde birden fazla biçem varsa sağ terim olarak bir demet
kullanmak gerekir:
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
>>> for name, phone in table.items():
... print '%-10s ==> %10d' % (name, phone)
...
Jack ==> 4098
Dcab ==> 7678
Sjoerd ==> 4127
Çoğu biçim aynı C dilindeki gibi çalışır ve doğru veri türünün
geçirilmesi gerekir; bu yapılamaz ise bir istisna oluşur.
%s biçiminin kullanımı daha rahattır; verilen
argüman dizge değilse yerleşik işlev str() ile
dizgeye dönüştürülür. Genişlik ya da hassasiyeti belirtmek için
* ile bir tamsayı argüman kullanılabilir. C dilindeki
%n ve %p biçimler ise
desteklenmemektedir.
Eğer bölmek istemediğiniz gerçekten uzun bir biçim dizgeniz varsa
biçimlendirmek istediğiniz argümanlara konumu yerine ismiyle atıfta
bulunabilmeniz güzel olur. Bu aşağıda gösterildiği gibi
%(isim)biçim şeklinde yapılabilir:
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> print 'Jack: %(Jack)d; Sjoerd: %(Sjoerd)d; Dcab: %(Dcab)d' % table
Jack: 4098; Sjoerd: 4127; Dcab: 8637678
Bu özellik bütün yerel değişkenlerin bulunduğu bir sözlük geri döndüren
yerleşik işlev vars() ile beraber kullanıldığında
faydalı olur.