Return hakkında soru

Merhaba return deyimini anlamaya çalışıyorum.İki kod var
def sayaç(sayı,sınır):
print(sayı)
if sayı==sınır:
print(‘END’)
else:
sayaç(sayı+1,sınır)

def sayaç(sayı,sınır):
print(sayı)
if sayı==sınır:
return ‘END’
else:
sayaç(sayı+1,sınır)

İlk kodda çıktıda en sonda END yazarken ikincisinde yazmıyor.Bunun açıklaması nedir? Return deyimini biliyorum ama bunu anlayamadım

Merhaba return bir fonksiyondan bir değer yada bir değer grubu almak için kullanılır.

ilk fonksiyonda print() ile (‘END’) yazdırıyorsun.

Ama ikinci fonksiyonda (‘END’) i hiç bir yerde yazdırmıyorsun.

Bunun en kolay yolu:

print(sayaç(sınır, sınır))

şeklinde çağırmaktır.

Yani return ile sayaç değer döndürür ama yazdır komutunun içine almazsanız o değeri yazdırmaz.

Teşekürler peki şunu nasıl açıklarsınız?
Mesela en basitinden
def deneme():
return ‘end’
Burada deneme() komutu ‘end’ çıktısı veriyor print olmadığı halde.Ancak yazdığım soruda olmuyor.
aynı kodu printle yazdığımda
def deneme()
print(‘end’) ise end çıktısı veriyor ’ ’ olmadan.
Ben soruda return ile yazdığımda ’ ’ içinde end yazmasını bekliyordum ama çıktı vermedi.

return ‘end’ Eşit değildir print()

def method():
   # stuff
    return print(“some string”)

Şeklinde dönüşe fonksiyon verirsen çıktı görebilirsin.

Is it bad style to return a print statement? - Python - Learn Code Forum (learncodethehardway.com)

Yani return’ün tüm kullanımlarına burada örnek vermedim.

Sadece eğer bir şey yazdırmasını bekleyeceksek print() fonksiyonunu içermeli.

İçermezse yazdırmaz.

Fonksiyon dönüşleri yazdırmak için kullanılabildiği gibi kullanılmayabilir.

Özetlersem.

return, fonksiyonda bir değer döndürür, ama yazdırmak istersen bu değeri bir print() içinde belirmen gerekir.

Bu kendi başına kesinlikle ‘end’ yazmaz.

Mutlaka

print(deneme())

şeklinde yazmış olmak gerekir

Eğer

sadece

deneme()

şeklinde çağırırsan çıktı vermez.

Bu kodun çalıştırdığın resmi varsa paylaşır mısın?

Ornegin, “ters_yazdir” fonksiyonumuz, girilen string nesnesini tersten yazdirsin. Bizim de bu fonksiyonun ciktisini kullanabilmemiz lazim olsun. Bunu su kod parcasi ile saglayamayiz (saglariz ama gereksizce mesakkatli bir yontem ile):

def ters_yazdir(text):
    print(text[::-1])
    
ters_yazdir("yazbel")

Bu kod parcasi istedigimiz ciktiyi uretiyor ama onu dondurmuyor (return etmiyor), yalnizca basiyor (print).Bizim bu ciktiyi baska bir islemde kullanabilmemiz icin veya bir nesne olarak saklayabilmemiz icin onun dondurulmesine ihtiyacimiz var:

def ters_yazdir(text):
    return text[::-1]

ters_cikti = ters_yazdir("yazbel")

Artik ters_cikti degiskeninin sahip oldugu deger, ters_yazdir fonksiyonunun dondurdugu degerdir.

2 Beğeni

Güzel anlatmışsınız, o konuda sanırım ben çok becerikli değilim.

Ben başka bir yerde takıldım sorusuyla alakalı.

Ben buraya takıldım.

Bilmediğim yada gözden kaçırdığı bir şey mi var?

Programlamada imkasız diye bir şey yoktur. Sonuçta bir şekilde her şey yapılabilir ama alıntı yaptığım kod durduk yere konsola yazar mı?

Yani bir yerlerde print(deneme()) yapıyor olması gerekir diye düşünüyorum en azından.

Burada çıktıdan kastı print olmadığı halde dediğini print ettiği algısı oluşturdu.

Olabilir belki bilmediğimiz bir şey vardır diye bakıştırdım gözüme istisna çarpmadı.

Ya yanlış anlıyorum, ya bilmediğim bir şey var, yada kodun tamamı olmadığından aynı şeyi düşünmüyoruz.

Sizin fikrinizi de almak isterim.

1 Beğeni

Yani print ifadesi olmadan ciktiyi alabiliyor olmamizla ilgili aklima gelen tek sey, belki kod parcacigi bir komut satirinda yurutuluyorsa bu sebepten oturu ciktiyi aninda alabiliyor olmamiz:

Screenshot from 2022-06-30 10-56-48

Komut satirinda tanimladigimiz bir degiskeni cagirinca dogrudan tuttugu degeri yazdirmasi gibi bir durum oluyor bence. Eger bu da degilse, sebebini ben de bilmiyorum :slight_smile:

Duzenleme:

Buna katilmadigimi belirtmeliyim…

2 Beğeni

Gayet mantıklı. İhtimal dahilinde.

1 Beğeni

Ekrana yazdırmasıyla ilgili sanırım şöyle bir durum oluyor.Mesela
a=‘end’
şeklinde bir end değişkeni belirlediğimizde tekrar a komutu verdiğimizde ‘end’ çıktısı veriyor.Yani a ekrana yazdırılmıyor bu durumda sadece a değişkeninin ne olduğunu görüyoruz.
def deneme():
return ‘end’
burada da aynı durum oluyor.‘end’ ekrana yazdırılmasa da böyle bir değişken belirlenmiş oluyor.zaten
def deneme():
print(‘end’) ekrana end çıktısını verirken ilk durum ‘end’ çıktısı veriyor.İkisi arasında fark var.Ben ekrana yazdırıyor gibi düşünmüşüm ancak sonradan anladım hatamı.Cevaplar için teşekkürler

1 Beğeni