Python parametre türleri işlevi
Yanılmıyorsam, Python fonksiyon oluşturma bu gibi çalışır:
def my_func(param1, param2):
# stuff
Ancak, aslında bu parametre türleri vermeyin. Eğer yanlış hatırlamıyorsam, ayrıca, Python güçlü bir yazılı dil, gibi, Python, farklı türde bir parametre olarak işlev yaratıcısı beklenenden daha iyi olmaz gibi görünüyor. Ancak, nasıl Python fonksiyonu kullanıcı doğru pas çeşitleri olduğunu biliyor mu? Program sadece yanlış türü varsa, bu işlev aslında parametre kullanır varsayarak ölecek mi? Türünü belirtmek zorunda mısın?
CEVAP
Diğer cevaplar ördek yazarak ve tzot basit cevabı açıklayan iyi bir iş yapmış:
Python değişkenleri gibi diğer dillerde değişken bir tip olduğu ve değeri yok; isimleri kendi türünü bilmediğiniz nesneleri işaret vardır.
Ancakilginç bir şey, 2010 yılından bu yana değişti soru ilk sorulduğunda. PEP 3107 implementaion ile Şimdi aslında bir öznitelik türü ve böyle değeri: dönüş türü belirtebilirsiniz
def pick(l: list, index: int) -> int:
return l[index]
pick
2 parametre, 8 ** bir listesi ve bir tam sayı index
alır burada görebiliriz. Ayrıca bir tamsayı döndürmesi gerekir.
Yani burada ima l
listesi tamsayılar hangi görebiliriz olmadan fazla çaba, ama daha karmaşık fonksiyonları olması biraz kafa karıştırıcı olarak ne listesi içermelidir. Biz de index
varsayılan değer 0 olmasını istiyorum. pick
yazmak için seçebilirsiniz bunu çözmek için böyle yerine:
def pick(l: "list of ints", index: int = 0) -> int:
return l[index]
Ama ÖNEMLİ NOT Bu Python alışkanlık zam TypeError
iletirseniz bir şamandıra içine index
, bu nedenle bu ana noktaları Python tasarım felsefesi: "hepimiz yetişkin burada" demek ki, siz farkında olun ne yapabilirsiniz geçirmek için bir işlevi ve ne yapabilirsiniz yok. Eğer gerçekten tür güvenli kod yazmak istiyorsanız isinstance
işleve geçirilen bağımsız değişken doğru veya yazın böyle bir alt sınıfı olduğunu kontrol etmek için kullanabilirsiniz:
def pick(l: list, index: int = 0) -> int:
if not isinstance(l, list):
raise TypeError
return l[index]
PEP 3107 sadece kod okunabilirliği artırmak değil, aynı zamanda here hakkında okuyabileceğiniz birkaç uydurma usecases vardır.
Python 3.5 bu tür ipuçları/notlar için standart bir modül tanıtır, PEP 484 giriş ile daha fazla ilgi var.
Ayrıca sözdizimi geliştirme mypy (GitHub) aracı isteğe bağlı statik tür denetimi (PEP 484 uyumlu) için kullanılır.
Daha önce bir belgelenen Python örnek Sphinx ile kod benzer işlevler docstrings bu gibi biçimlendirilmiş yazarak elde edilebilir:
def pick(l, index):
"""
:param l: list of integers
:type l: list
:param index: index at which to pick an integer from *l*
:type index: int
:returns: integer at *index* in *l*
:rtype: int
"""
return l[index]
Ancak, bu işlemin birkaç ekstra satırları, tam sayısı bağlıdır ne kadar açık olmak istiyorsun ve nasıl biçimlendirmek için kütüphane ama öyle olmalı temizlemek için nasıl PEP 3107 sağlar bir alternatif olduğunu pek çok yönden üstün. Bu arada PEP 484 açık, esnek ve hassas olan tür ipuçları/notlar bunlar için bir sözdizimi tanımlayan standart bir modül sağlar.
Ağır ima türü kullanan Python kod örneği here bulunabilir.
İşlevi'Python adı s ile bir dized...
Bir nesnenin mevcut tüm özelliklerini ...
Zarif Python CamelCase camel_case dönü...
Geçen anahtar kelime python parametre ...
Python alma yöntemi parametre adları...