Hazır fonkisyonun içeriğini görmek için ne yazmalıyım?

mesela: itertools.combinations(kume,4)

burdaki combinations fonksiyonunun içeriğine nasıl ulaşırım?

Windows kullanıyor iseniz python kurulu olan dizine gelin. Orada lib ya da Libs olacak o klasörün içinde bütün hazır fonksiyonlar var threading, itertools, socket, Server socket, vs.

2 Beğeni

ben combinations fonksiyonunun nasıl tanımlandığını görmek istiyorum ama…

Dediğinizi anlamadım .?

1 Beğeni

afedersiniz, ben sizi yanlış anlamışım. şimdi dediğiniz şekilde buldum. teşekkür ederim.

1 Beğeni

IDLE kullanıyorsanız alt+m yapın. Modül adını yazın karşınıza çıkar.

1 Beğeni

bunun için yeni bir başlık açmalı mıydım bilmiyorum ama önce buradan yardım istemenin daha doğru olacağını düşündüm. dediğiniz şekilde iterttools.py dosyasını açtığımda içinde birçok class görüyorum. bunlardan combinations’un nasıl çalıştığını merak ediyorum ama buna dair herhangi bir şey anlayamıyorum:

class combinations(object):
    """
    combinations(iterable, r) --> combinations object
    
    Return successive r-length combinations of elements in the iterable.
    
    combinations(range(4), 3) --> (0,1,2), (0,1,3), (0,2,3), (1,2,3)
    """
    def __getattribute__(self, *args, **kwargs): # real signature unknown
        """ Return getattr(self, name). """
        pass

    def __init__(self, iterable, r): # real signature unknown; restored from __doc__
        pass

    def __iter__(self, *args, **kwargs): # real signature unknown
        """ Implement iter(self). """
        pass

    @staticmethod # known case of __new__
    def __new__(*args, **kwargs): # real signature unknown
        """ Create and return a new object.  See help(type) for accurate signature. """
        pass

    def __next__(self, *args, **kwargs): # real signature unknown
        """ Implement next(self). """
        pass

    def __reduce__(self, *args, **kwargs): # real signature unknown
        """ Return state information for pickling. """
        pass

    def __setstate__(self, *args, **kwargs): # real signature unknown
        """ Set state information for unpickling. """
        pass

    def __sizeof__(self, *args, **kwargs): # real signature unknown
        """ Returns size in memory, in bytes. """
        pass

bu itertools.combinations(kume,4) komutu kume isimli listenin 4 elemanlı alt kümelerini sırayla yazdırıyor. ben bunu nasıl yaptığını görmek istiyorum. bu gizli mi tutuluyor; yoksa ben nereye bakacağımı mı bilmiyorum?

Bu sayfada, kaynak kodların C ile yazıldığını anlıyoruz.

1 Beğeni

çok teşekkür ederim. anladığım kadarıyla kaynak kodlara ulaşmak için harici araştırma yapmak gerekiyor. bunu python içinden kaynak kodlara ulaşmanın bir yolu yok diye de anlamalı mıyım?

1 Beğeni

Rica ederim. Python icerisinden kaynak kodlara ulaşmak derken neyi kastettiginizi anlamadım kusura bakmayın

kaynakKodlar(combinations) gibi bi komut yazarak ya da kullandığımız ide’nin bir özelliğinden yararlanarak kaynak kodlara ulaşabiliyor muyuz diye merak etmiştim.

sizin verdiğiniz linkteki kodu anlamaya çalıştım. sadece ismini değiştirerek şu şekilde fonksiyonu çalıştırmaya çalıştım ama hata veriyor:

def cmbnt(iterable, r):
    # combinations('ABCD', 2) --> AB AC AD BC BD CD
    # combinations(range(4), 3) --> 012 013 023 123
    pool = tuple(iterable)
    n = len(pool)
    if r > n:
        return
    indices = range(r)
    yield tuple(pool[i] for i in indices)
    while True:
        for i in reversed(range(r)):
            if indices[i] != i + n - r:
                break
        else:
            return
        indices[i] += 1
        for j in range(i+1, r):
            indices[j] = indices[j-1] + 1
        yield tuple(pool[i] for i in indices)


hh = list(cmbnt("has",2))
print(hh)

ayrıca koddaki else’in neyin else’i olduğunu anlayamadım. if ile aynı hizaya getirip denedim yine olmadı. siz de çalıştırmayı denerseniz çok sevindirirsiniz beni.

oysa şu kod ile aynı sonucu vermesini beklemiştim:

import itertools
hh = list(itertools.combinations("has",2))
print(hh)

Ne hatası alıyorsunuz?

Python’da for’un da else’i vardır; döngüden normal olarak çıkılırsa (bir break ifadesine denk gelinmediyse) çalışır.

şu hatayı alıyorum:

Traceback (most recent call last):
  File "C:/Users/pc/PycharmProjects/kripto/istakramdakiSayfa.py", line 60, in <module>
    altKume = list(cmbnt("has",2))
  File "C:/Users/pc/PycharmProjects/kripto/istakramdakiSayfa.py", line 54, in cmbnt
    indices[i] += 1
TypeError: 'range' object does not support item assignment

peki else olmasa da for’dan çıkınca aynı hizadaki satırları çalıştırmayacak mı zaten? neden else kullanılıyor?

Sorun şu satırlarda:

...
        indices[i] += 1
...
            indices[j] = indices[j-1] + 1
...

`indices` bir `range` nesnesi olduğu için bu nesneye bu şekilde _öğe ataması_ yapılamaz. Bu kod muhtemelen Python 2 kodu.

[quote="hmalkan, post:13, topic:2447"]
peki else olmasa da for’dan çıkınca aynı hizadaki satırları çalıştırmayacak mı zaten? neden else kullanılıyor?
[/quote]

Evet, çalıştıracak. `else` şu anlama gelir: Eğer döngü bir `break` ile bitmezse buradaki kodları çalıştır. Yani burada bir koşul söz konusu. Eğer böyle düşünürseniz, `if`-`else` ifadelerinde de "`if`'ten sonra aşağıdaki kodlar zaten çalışacak, `else`'e ne gerek var?" diyebiliriz. Ama biz biliyoruz ki, oradaki `else` gereksiz değil ve bir kullanım amacı var. `for`'daki `else` de aynı bu şekilde.