Fonksiyonlarda Argümana Uygulanan Kullanım Şekli


#1

Arkadaşlar bu kullanım şekli bu aralar karşıma sık çıkıyor ve mantığını kavrayamadım, birde bu kullanımı argüman dışında nasıl uygulayabiliriz?

@commands.command()
async def rename(self, ctx, channel: discord.VoiceChannel, *, new_name):
    await channel.edit(name=new_name)

Kavrayamadığım kısım: channel: discord.VoiceChannel


#2

Python fonksiyonlarında yeni getirilen bir özellik. Fonksiyonun alacağı argümanların tipini belirtebiliyorsunuz. Örneğin sadece sayı almasını istediğimiz bir fonksiyon tanımlamak istersek

def test(sayi:int):
    return sayi*sayi

test("merhaba") # hata verir
test(15) # doğru kullanım

Koddaki channel: discord.VoiceChannel kısmı da, channels argümanının discord.VoiceChannel tipinde bir argüman olması gerektiğini bildiriyor.

Daha fazla bilgi için

https://docs.python.org/3/tutorial/controlflow.html#function-annotations


#3

Ve fonksiyonlara böyle bir özellik geldikten sonra sınıflara gelmeseydi olmazdı

@dataclass
class Point:
    x: float
    y: float
    z: float = 0.0

p = Point(1.5, 2.5)
print(p)   # produces "Point(x=1.5, y=2.5, z=0.0)"

Aynı özellik class dada var


#4

Uyari bile vermiyor.
Hakikaten, nasil aciyoruz type checking’i?


#5

Resmi bir sey bulamadim ama dokumanlar hep “3rd party type checker” diyor, disarida da her yerde mypy geciyor.


#6

Evet kusura bakmayın, bir yanlışlık olmuş. Python son sürümlerinde tip kontrolü yapıldığını sanıyordum. Malum takip etmiyorum eskisi kadar.

Peki bu özellik daha çok ne işe yarayabilir?


#7

Type checking mi?

Cok: Programcinin yapabilecegi hatalar listesinden kocaman bir sinifi eksiltiyor.

Python’da feci sekilde eksik olan dogrulamalar arasinda en onemlisi olmayabilir, ama yuku benden alip bilgisayara verecek her sey iyidir.

Ozellikle projeler buyudukce yapilan basit hatalar artiyor.


#8

Hayır tip kontrolü değil, python da yeni gelen argüman tipini belirtmek ne işe yarayabilir? benim aklıma sadece, gelistiriciye bu fonksiyonun hangi tip parametre alması gerektiğini belirtmesi geliyor.


#9

e arguman tipini belirtmek arguman tipini kontrol etmek icin ön şart?


#10

Python uyarı vermiyor dediniz ya yanlış tip argüman gönderince, öyleyse merak ederek soruyorum, bu özelliğin bizden aldığı yük nedir ?


#11

Tkinter’de Text aracının find metodunu karıştırırken bir argüman gördüm. Adıtextti. Bu text widget olan text miydi, metin anlamında text mi?

İşte burada tip belirtimi yapılsaydı hiç bu ayrıma düşmezdim.


#12

Tam olarak şunu demek istiyorum. Python’da bir fonksiyonun alması gereken argümanın int tipinde olmasını söylediğimiz halde, biz string bir argüman gönderdiğimizde Python buna itiraz etmiyor.Ancak tip kontrollü dillerde kesinlikle hata verir, farklı tipte argüman gönderilmesine müsade etmez.

Bu durumda,Python’da argümanların tipini belirtmek sizin dediğiniz gibi bir karışıklıkta işe yarar. Ancak bir argümanın tipinin ne olması gerektiğine döküman sayfalarından da bakabiliyoruz. Bu yüzden, Python’da argüman tipini sadece bunun için mi belirteyim diye soruyorum.


#13

Sadece kodun okunaklığını artırmak için tasarlanmış. Kısıtlama getirirmeme sebebi ise değişkenlerin dinamikliğini engellemesini önlemek.
Mesela siz bir sınıf yazdınız. Bu Text sınıfının tüm özelliklerini taşıyor. Eğer kısıtlama olursa bu sınıfın örneğini o fonksiyona veremezsiniz. Ama dinamiklik buna izin veriyor.

Kısacası evet. Bu amaç için kullanın. Yorum satırları ile aynı amaç.

#Benim gibi bunu kullanmıyorsanız kullanmaya başlamalısınız.

#14

Python sizi bu konuda zorlamasa da siz kendinizi zorlayabilirsiniz.
Örneğin mypy ile:


Ya da PyCharm’da bulunan ilgili denetleme (inspection) ayarı ile.


#15

Hayir, sadece mypy gibi gereclerle type checking yaparken, ve bunu otomatik olarak veya çok sık bir sekilde yaparken belirt. Aksi takdirde kodun gerisinde kalma ihtimali var; yanlis belirtme hic olmayan belirtmeden daha kotu bir sey.


#16

hepinize cevaplarınız için teşekkür ederim sağolun.