Fonksiyonlar ve return

Merhabalar resimdeki gibi bir fonksiyon yazdırdım, istediğim gibi çalışıyor ama isim ve soyisimi sırası ile return etmek istiyorum. Yani isim ve soyisim yanyana olacak ve print değil de return olacak. Nasıl yapabilirim?

Merhaba. Ne istediginizi tam anlayamadım ama sanırım şunu tarif etmişsiniz:

def isim_yazdırma(demet):
    return demet

Kodlarınızı burada anlatıldığı gibi atarsanız daha iyi olur:

Hayır kodumu yazmadan şöyle anlatayım, başka bir örnek üzerinden: fonksiyonum bir string alsın ve bunun ilk ve ikinci indexini return etsin. Bunu nasıl yaparım? Print ile yapabiliyorum ama return ile olmuyor.

def f(s):
    return s[0], s[1]

Hatta bu da işinizi görür diye tahmin ediyorum:

def f(s):
    return s[:2]
1 Beğeni

Teşekkür ederim şimdi oldu :slight_smile:

Ben arkadaşın soruyu farklı bir açıdan düşündüm ve aşağıdaki durumla karşılaştım.
Düşüncem şu print fonksiyonu ile elde edeceğim çıktıyla return ettiğim şey aynı şey olsun(returnda print kullanmadan). Aslında sizin yaptığınız bir tupple veya str gibi nesne vermek ama print bunu çıkarmıyor bunu nasıl yapabiliriz ?

def f(s):
    return print(s[0],s[1])
f('sayı')
print(f('sayı'))
def l(a):
    return 9
def g(a):
    return l(a)
print(g(9))
print(type(print()))

çıktılar
s a
s a
None
9
<class 'NoneType'>

yani print return edersek none değeri alıyoruz ve print NoneType sınıfından bir fonksiyon Nonetype nedir?

print, NoneType sınıfından bir fonksiyon değil. print bir şey return etmediği için siz return print("hello") yazarsanız, return edilen şey None olur. Yani bir fonksiyonda herhangi bir veri return edilmiyorsa, None return edilmiş olur.

a = print("hello")
print(a)  # -> None

Hmm anladım hatamı teşekkürler.Peki print fonksiyonu ekrana çıktıyı nasıl veriyor?
Birde

Bu dediğim mümkün birşey mi?(yani benim yazdığım f fonsiyonunun returnda print olmadan çıktısı yine aynı olsun)

Kaynak kodlarını incelemeniz gerekiyor.

Ne demek istediğinizi anlamadım. print fonksiyonuna ne yazarsanız onu ekrana yazdırır. Anlatmaya çalıştığınız şey konusunda basit bir örnek gösterin, üzerinde konuşalım isterseniz.

yukarıda ekrem beyin verdiği cevaplar bir tupple ve str
ama ben return edilen şeyin aynı print in yaptığı gibi istenen elamanları aynen almasını istemiştim.
Aslında şöyle bir şey

def f(a):
    return a[0]
print(f('ali'))
yazdığımda bana a yı döndürüyor
ama 
def f(a):
    return a[0],a[1]
print(f('ali'))
bunu yaptığımda tupple alıyorum ben burdada iki ayrı nesne gibi onları almak istemiştim
Şöyle diyebilirim fonksiyondan  iki veya daha fazla nesne ile çıkmak istiyorum.

print fonksiyonunu print(a[0], a[1]) olarak yazarsanız. elbette a l gibi bir yazı alırsınız. Ama return a[0], a[1] derseniz return edilen veri bir tuple olur. Böyle durumlarda return edilen değeri almak istediğiniz çıktıya göre yeniden düzenlemeniz gerekiyor.

Örneğin:

def f(s):
    return f"{s[0]} {s[1]}"

print(f("ali"))
# Çıktı: a l

Tekrar belirteyim; birden fazla değer return edildiği zaman return edilen şey bir tuple olur.

def f():
    return 1, 2, "a"


a, b, c = f()
print(a)

x = f()
print(x[0])
1 Beğeni

Fonksiyonlarda bir elemanın ancak bir görüntüsü olabilir buna aykırı benim dediğim galiba

Bu return ile alakalı değil, a, b, c sözdizimi bir tuple oluşturuyor. Etrafında parantez kullanmak bence daha okunaklı, ve bazı durumlarda sözdizimindeki kurallar yüzünden şart.

Ben, return ile alakalı demedim zaten. Birden fazla değer return edildiği zaman return edilen şey bir tuple olur dedim.

Tamam, ben de sadece buna sebep olan genel kuralı hatırlattım.


Fonksiyonlar sadece bir nesne döndürebilir. Birden fazla nesneyi beraber saklamak istediğinizde ne kullanıyorsunuz? tuple veya list. Fonksiyonlarda da birden fazla nesne bir tuple olarak döndürülebilir.

Eğer asıl istediğiniz bu tuple’ın içindekileri print ile beraber ayrı ayrı parametre veriyormuş gibi kullanmaksa bunun için * kullanılıyor:

def f(a):
    return a[0],a[1]
print(*f('ali'))
2 Beğeni

Doğru söylüyorsunuz. :innocent:

Bu arada, print fonksiyonunun işlevi ile sys.stdout.write fonksiyonunun işlevi hemen hemen aynıdır. Ancak ben print fonksiyonunun içeriğinde nasıl bir kod yapısı olduğunu daha önce hiç araştırmadım.

print fonksiyonu, builtins kütüphanesinde de yer alıyor.

import builtins

builtins.print("hello")

Ancak, builtins kütüphanesi dile gömülü olarak geliyor, herhangi bir dosyada yer almıyor.

>>> import builtins
>>> builtins
<module 'builtins' (built-in)>

Normalde bazı kütüphaneler için şöyle çıktılar alırız:

>>> import os
>>> os
<module 'os' from '/usr/lib/python3.8/os.py'>

sys kütüphanesi de herhangi bir dosyayı işaret etmiyor.

>>> import sys
>>> sys
<module 'sys' (built-in)>

Yani print fonksiyonunu çağırdığımızda, arka planda nasıl işlemler gerçekleşiyor da yazdırma işlemi gerçekleşiyor doğrusu bilmiyorum. Ama isteyen arkadaşlar yukarıda paylaştığım kaynak kodları inceleyebilirler.

1 Beğeni

Veri tipi cebirinde product (carpim) ve coproduct (sum/toplam) tipleri var. Tipleri set olarak dusunursek (

bool = { False, True }

) A ile B tiplerinin carpimi olan tip, A×B Kartezyen carpiminin degerlerini alabilen bir tip:

bool × bool = { (False, False), (False, True), (True, False), (True, True) }

Donus tipini boyle dusundugunde yine tek bir eleman donuyor.