Daha Güzel Çıkış Biçemi
Önceki Giriş ve Çıkış Sonraki
Daha Güzel Çıkış Biçemi
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.
Önceki Üst Ana Başlık Sonraki
Giriş ve Çıkış Başlangıç Dosya Okuma ve Yazma
Bir Linux Kitaplığı Sayfası