koddla

Yazılımcıları bilgi ile güçlendirir.

Python String Fonksiyonları – str ve repr

Bir nesneyi yazdırılabilir hale getirmek için kullanılabilecek iki metot bulunur.

repr(x)x.__repr__()‘i çağırır: x.eval genellikle bu metotun sonucunu orijinal nesneye geri dönüştürür.

str(x), x.__str__()‘i çağırır: nesneyi tanımlayan okunabilir bir dizeye dönüştürür. Böylece bazı teknik ayrıntılara gerek olmayabilir.

Python’da repr() nedir?

Birçok tür için bu işlev, iletildiğinde aynı değere sahip bir nesne verecek bir dizge döndürme girişiminde bulunur eval(). Aksi takdirde, temsil, ek bilgilerle birlikte nesnenin türünün adını içeren, açılı parantez içine alınmış bir dizedir. Bu genellikle nesnenin adını ve adresini içerir.

Python’da str() ne işe yarar?

Dizeler için bu fonksiyon dizenin kendisini döndürür. repr(object) ile str(object) arasındaki fark str(object) her zaman eval() için kabul edilebilir bir dizge döndürmeye çalışmaz. Daha ziyade, yazdırılabilir veya ‘okunabilir’ bir dize döndürür. Hiçbir bağımsız değişken belirtilmezse boş bir dizeyi döndürür ''.

Örnek 1:

s = """w'o"w"""
repr(s) # Çıktı: '\'w\\\'o"w\''  
str(s)  # Çıktı: 'w\'o"w'
eval(str(s)) == s  # SyntaxError 
eval(repr(s)) == s # Çıktı: True
Örnek 2:
import datetime
today = datetime.datetime.now()
str(today)  # Çıktı: '2016-09-15 06:58:46.915000'
repr(today) # Çıktı: 'datetime.datetime(2016, 9, 15, 6, 58, 46, 915000)'

Bir class yazarken bu yöntemleri geçersiz kılabilirsiniz:

class Temsili(object):

    def __init__(self, x, y):
        self.x, self.y = x, y

    def __repr__(self):
        return "Temsili(x={},y=\"{}\")".format(self.x, self.y)

    def __str__(self):
        return "x' {} şeklinde ve y'yi {} şeklinde temsil eder".format(self.x, self.y)

Yukarıdaki classı kullanarak aşağıdaki sonuçları elde edebiliriz:

r = Temsili(1, "Zıpla")
print(r)  # __str__ yazdırır
print(r.__repr__)  # __repr__: '<bound method Temsili.__repr__ of Temsili(x=1,y="Zıpla")>' yazdırır
rep = r.__repr__()  # __repr__'in çıktısını yeni bir değişkene yazdırır
print(rep)  # 'Temsili(x=1,y="Zıpla")' yazdırır
r2 = eval(rep) # rep'i çalıştırır
print(r2)  # yeni objeden __str__ yazdırır
print(r2 == r)  # 'False', çünkü farklı objeler



Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to top