SORU
5 EKİM 2010, Salı


`Dize jeneratör bir sürümü var.() split` Python?

string.split() döndürürlisteörnek. Bunun yerine generator döndüren bir sürümü var mı? Jeneratör bir sürüm olmasına karşı herhangi bir sebep var mı?

CEVAP
19 Mart 2012, PAZARTESİ


re.finditer(bağlantı) yükü oldukça az bellek kullanır gayet muhtemeldir.

def split_iter(string):
    return (x.group(0) for x in re.finditer(r"[A-Za-z'] ", string))

Demo:

>>> list( split_iter("A programmer's RegEx test.") )
['A', "programmer's", 'RegEx', 'test']

düzenleme:Sadece bu python sabit bellek 3.2.1, benim test metodolojisi doğru olduğunu varsayarak alır teyit ettim. Çok büyük boyutta bir dize (1GB kadar) ben yarattım, for bir döngü ile iterable (ekstra hafıza oluşturulan olurdu DEĞİL liste bir anlama,) tekrarlanır. Bu hafıza (bellek bir büyüme olsaydı, şimdiye kadar 1GB dize daha az oldu) dikkat çekici bir büyüme içinde sonuç vermedi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BruBearBaby

    BruBearBaby

    25 Ocak 2011
  • Jeb Corliss

    Jeb Corliss

    17 Kasım 2006
  • pain975

    pain975

    27 NİSAN 2008