Fonksiyonun dışına değer döndürme

def getbasicinfo(usernamelist):
    users = {}
    for username in usernamelist:
        users[username] = user()
    return users


getbasicinfo(["asfd", "asdfsd"])
print(users)

Doğrudan konuya giriyorum user isimli bir classım var getbasicinfo() fonksiyonu ile users adında bir dict oluşturup key’i username olan value değeri olarak bir obje oluşturuyorum.
Fakat bu users sözlüğünü return ile kullanınca şu hatayı alıyorum:

Traceback (most recent call last):
  File "project.py", line 22, in <module>
    print(users)
NameError: name 'users' is not defined

Bu users sözlüğünü nasıl fonksiyonun dışına çıkarabilirim ?

users sözlüğü aslında fonksiyondan geri dönüyor. Ama sadece local alanda tanımlı olduğu için global alanda users ismini kullanamıyorsunuz. usersglobal olarak tanımlarsanız bunun üstesinden gelirsiniz. Ancak bu başka bir konu.

Fonksiyon bir değer döndürdüğü için, ya fonksiyonu çağırırken print fonksiyonunun içinde print(getbasicinfo(["asfd", "asdfsd"]) şeklinde çağıracaksınız; ya da bu fonksiyondan dönen değeri bir değişkenin değeri haline getirip, print fonksiyonunun içine bu değişkeni yazacaksınız.

users = getbasicinfo(["asfd", "asdfsd"])
print(users)
1 Beğeni

Bu kodu şu şekilde düzenler misiniz? Olmama ihtimali var :

def getbasicinfo(usernamelist):
    global users
    users = {}
    for username in usernamelist:
        users[username] = user()
    return users


getbasicinfo(["asfd", "asdfsd"])
print(users)

@throwaway1, fonksiyon değer döndürecek ise, döndürülecek değeri global yapmanın ne anlamı var? Veya değer global alanda geçerli olacaksa o zaman değer döndürmenin ne anlamı var?

4 Beğeni

Bu sınıfı siz yazdıysanız baya konu atlamışsınız, fonksiyondan dönen değerin nasıl kullanılacağını öğrenmeden nesne tabanlı programlama öğrenme yanlış.


return deyimi ve fonksiyonlardan dönen değerlerin nasıl kullanılabileceği burada anlatılmış: Fonksiyonlar — Yazbel Python Belgeleri

1 Beğeni

Teşekür ederim global çözümü benim de aklıma gelmişti fakat global olarak tanımlamak istemiyordum değişken atama kısmını gözden kaçırmışım teşekkür ederim ve bunun için konu açtığım için özür dilerim.