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.
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
Bu tanımlama yanlış. Varsayılan parametreler, zorunlu parametrelerden sonra tanımlanabilir.
Haa dogru pardon ben cumlenizi sonra da tanimlanabilir seklinde anladim yani bu hata hakkinda degil de @Frequenter e cevap verdiniz diye anladim pardon