"..." (Ellipsis) ne işe yarar?

PyCharm’da bir program yazıyordum. ctrl tuşuna basılı tutup fare ile kalıtım içeren şeylere basınca kaynak dosya açılıyor. Programımda threadler vardı. ctrl’ye basılı tutup threading’e bastım, PyCharm’ın kendi python’undaki threading.pyi dosyası açıldı.

Orada şöyle ilginç kodlar vardı.

if sys.version_info >= (3,):
    TIMEOUT_MAX = ...  # type: float

Ben olduğum yerde kaldım. Ve açtım etkileşimli kabuğu:

>>> a = ...
>>> a
Ellipsis
>>> dir(a)
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__ha
sh__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr_
_', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> Ellipsis()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'ellipsis' object is not callable

Ne yaptım ettim bulamadım. Bu ... nedir ne işe yarar?
Yardımlarınızı bekliyorum. :slight_smile:

2 Beğeni

Aşağıdaki kaynaktan öğrendiğime göre kendisi bir yer tutucu.

2 Beğeni

Peki yer tutucu nedir?

Bir örnekle anlatmak gerekirse:

def foo():#Okuyan kişi için fonksiyon bundan ibaret  
    pass#Elbette programatik şekilde düzenlenebilir.

def bar():#İçi dolacak
    ...# Ancak şimdilik yazılmamış. 
#Başka kodları deneme amaçlı olabilir.

Hic bir ozelligi yok.

None turunun tek degeri olan None gibi, Ellipsis turunun tek degeri olan Ellipsis degeri(ne donusen bir token).

Teknik olarak hic bir farki yok. Pratikte kullanim alanlarini diger cevaplarda yazmislar.

Ellipsis göründüğünden daha anlamlı bir deyimdir: https://stackoverflow.com/questions/772124/what-does-the-python-ellipsis-object-do

Ellipsis bir sınıf değil mi?

Bakalım:

>>> type(Ellipsis)
<class 'ellipsis'>
>>> type(...)
<class 'ellipsis'>
>>> type(type(Ellipsis))
<class 'type'>
>>> type(type(...))
<class 'type'>

Yani Ellipsis ve ..., ellipsis sınıfının (ya da tipinin) nesneleri.

Siz;

dediniz ya ben ondan sordum.

Ben 'expression’a ‘deyim’, 'statement’a da ‘ifade’ diyorum. Python’da her şey bir ifadedir. Sınıf ve fonksiyon tanımlarını, import, return, break, vb. ifadeleri, atama ifadelerini birer ifade gibi düşünebilirsiniz. Bunun yanında herhangi bir şey döndüren her ifade bir deyimdir. Mesela şunlar birer ifadedir:

>>> class A:
...     pass
...
>>> def a():
...     pass
...
>>>

Bunlar birer ifadedir ancak herhangi bir değer döndürmedikleri için deyim değillerdir. Şu ifadeler ise birer deyimdir, çünkü bir değer döndürürler:

>>> A
<class '__main__.A'>
>>> A()
<__main__.A object at 0x01470A50>
>>> a
<function a at 0x01410858>
>>> a()
>>>

Gördüğünüz gibi hem sınıflar hem de sınıf örnekleri, hem fonksiyonlar hem de fonksiyon çağrımları birer deyimdir. Yani bir nesne için söylediğim yukarıdaki şu ifadem kesinlikle doğrudur:

1 Beğeni

Bunları bilmiyordum, öğrendiğim iyi oldu. İlgilendiğiniz için teşekkür ederim :wink:

1 Beğeni