Python fonksiyonlarinda parametrelere varsayilan deger atamak

Merhaba.pythonda soyle bir sey yapmak istiyorum:bir fonksiyon olsun,bu fonksiyonun 3 parametresi olsun ve bu parametrelerden sadece biri zorunlu olsun.kullanicin girdigi parametre sayina gore islem yapalim.eger ne demek istedigimi anlamdiysaniz soyle bir ornek daha vereyim:range fonksiyonunu dusunun.en fazla 3 parametre aliyor(bildigim kadariyla).bu parametrelerden sadece biri zorunlu.eger biz bir parametre girirsek sifirdan girdigimiz rakama kadar rakmalari siraliyor.eger iki parametre girirsek ilk rakamdan ikinci rakama kadar siraliyor. 3. de atlama degeri.bu tarz zorunlu olmayan parametreleri pythonda nasil yapa biliriz?yardimci olursaniz sevinirim.

Zorunlu olacak parametre dışında, diğerlerine varsayılan değer vererek.

evet olur ama kullanici o varsayilan degeri nasil degistirecek?

O parametreye değer vererek tabiki.

bir deneyeyim

Örneğin

def fonksiyon(zorunlu, opsiyonel=None):
    pass

fonksiyon(4)
fonksiyon(4,5)

olmadi.yada ben yapamadim:

def deneme(a,b,c):
    a = 5
    b = 3
    print(a,b,c)
    return a+b+c

deneme(1)

yine olmadi.yada yine ben yapamadim:

def deneme(a=None,b = None,c):
    a = 5
    b = 3
    print(a,b,c)
    return a+b+c

deneme(1)

Fonksiyon çalıştıktan sonra değerleri atadığın için bu sorunu alıyorsun.
Fonksiyon çalıştığı anda senden a,b,c değerlerini bekliyor.

def deneme(a= 5, b = 3, c):
      return (a + b + c)

Şimdi istersen a ve b değerlerinin default değerlerini değiştirebilirsin. c değerini kendin girmen gerekiyor.

Şöyle de yapılabilir

def test(zorunlu,*opsiyonel):
	if(len(opsiyonel)): # diğer parametreler de girilmiş mi?
		pass
	else: # sadece zorunlu olan mı girilmiş?
		pass

test(5)
test(5,6,7)

hata veriyor:

SyntaxError: non-default argument follows default argument

Bu tanımlama yanlış. Varsayılan parametreler, zorunlu parametrelerden sonra tanımlanabilir.

1 Beğeni

Syntax Error’ün içeriğine göre değiştirdiğin zaman sorun düzelecektir hızlı yazarken bu şekil tanımladım deneme şansım olmadı.

def deneme(c, a = 5 ,b = 3):
    return(c + a + b)

print(deneme(1))

Sınırsız parametre tanımlamak ile üç farklı parametre alıp ikisine default değer atamak farklı bir durum.

Hangisinin kullanılacağı programcının keyfine kalmış bir durum. Ben olanakları gösterdim. İki durumda da zorunlu ve opsiyonel parametreler bu şekilde tanımlanabiliyor. İster sınırlı, ister sınırsız parametre alır. Kendi örneklerimde default değer None olduğu için çok fark etmiyor ama diğer durumlarda fark var tabi.

Kullanıcının istediği gibi parametrenin ismi ile kullanım istiyorsanız “*” kullanılmıyor.

def deneme(**opsiyonel):
    print(opsiyonel)

deneme(a = 3 , b = 4 , c = 6)

şeklinde oluşturmanız gerekiyor.

Eğer tek yıldız kullanırsak;

def deneme(*opsiyonel):
    print(opsiyonel)

deneme(a = 3 , b = 4 , c = 6)

#TypeError: deneme() got an unexpected keyword argument 'a'

Bu sorunun sebepi ne idi?

Aksini iddia etmedim, parametreleri isim vererek kullanmadığım için. Kwargs detayına girmeye de gerek duymadım. Yine de eklemeniz iyi oldu :slight_smile:

1 Beğeni

Bu tanımlama yanlış. Varsayılan parametreler, zorunlu parametrelerden sonra tanımlanabilir.

1 Beğeni

Haa dogru pardon ben cumlenizi sonra da tanimlanabilir seklinde anladim yani bu hata hakkinda degil de @Frequenter e cevap verdiniz diye anladim pardon :smiley:

1 Beğeni