mesela: itertools.combinations(kume,4)
burdaki combinations fonksiyonunun içeriğine nasıl ulaşırı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.
ben combinations fonksiyonunun nasıl tanımlandığını görmek istiyorum ama…
Dediğinizi anlamadım .?
afedersiniz, ben sizi yanlış anlamışım. şimdi dediğiniz şekilde buldum. teşekkür ederim.
IDLE kullanıyorsanız alt+m yapın. Modül adını yazın karşınıza çıkar.
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?
ç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?
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.