Re: [python] file.next() (bylo Buducnost Pythonu: lambda, map, filter)

2017-03-31 Tema obsahu Petr Přikryl

radek napsal(a):
> Avšak souhlasím s názorem, že soubory se čtou 
> většinou po řádcích  takže je

> to takto praktické ale mám z toho pocit vyjímky která se mi nelíbí.

Problém je v tom, že zadrátovat do jazyka konstrukci, která ušetří
několik písmenek je sice praktické, ale nedobré. Nechť je prostě všechni
vidět. Pokud se soubory mohou číst i jinak, než po řádcích, což se děje
velmi často, tak bych tyto zjednodušující konstrukce do jazyka vůbec
nedával.



Presne tak, priklady, jak by to vypadalo jinak:

#cteni po radcich s defaultnim line oddelovacem (jak je ted)
for line in file("data.txt").lines():
...

#cteni po radcich, ktere jsou oddelene oddelovacem 
for line in file("data.txt").lines(""):
[...]


Ale definice, že řádek v textovém souboru je ukončen
 jaksi není obecně přijímaná. Když chci, musím
si to napsat sám a nebo použít odpovídající parser.


Jan Matějka

Ono obecnější řešení je udělat parsovací generátory, které by šly použít s
čímkoliv file-like jako vstupním prametrem, a nestrkat parsování to objektu
file. Tedy: [...]

for line in lines(file("data.txt")):
 ...
[...] atd.

Výpočetní náročnost by zústala stejná. Generátory mi přijdou jako skvělý
nástroj, škoda že se GvR brání zobecnění do více úrovní zanoření jenž nabízí
stackless python. 


Ale vdyť mi nic nebrání zpracovávat soubor po znacích.

# Vygenerujeme si testovaci textovy soubor.
f = open('test.txt', 'w')
for i in xrange(3):
f.write('Line %d.\n' % i)
f.close()


# Pruchod po znacich.

f = open('test.txt')
c = 'init'
while c != '':
c = f.read(1)
print c
f.close()

A nic mi nebrání napsat generátor, který vezme a bude vracet znaky
a použít ho:

def chargen(f):
c = 'init'
while c != '':
c = f.read(1)
yield c

for c in chargen(file('test.txt')):
print c

A můžu si napsat jakýkoliv jiný generátor/parser.

pepr
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] file.next() (bylo Buducnost Pythonu: lambda, map, filter)

2006-11-14 Tema obsahu Jan Matejka
 Petr Prikryl
 A k té explicitnosti -- místo xreadlines() bych sice mohl 
 psát __iter__(), ale...
 
 The Zen of Python, by Tim Peters
 
 Beautiful is better than ugly.
 Simple is better than complex.
 Readability counts.
 Special cases aren't special enough to break the rules.
 Although practicality beats purity.

Díky za reakci,
dle mého nedišputovatelného gusta uvedené věty s vyjímkou
Simple is better than complex
Although practicality beats purity
svědčí spíš pro styl xreadlines hlavně proto že tam je ten slovní základ
lines.

Avšak souhlasím s názorem, že soubory se čtou většinou po řádcích takže je
to takto praktické ale mám z toho pocit vyjímky která se mi nelíbí.

Jan Matějka

___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] file.next() (bylo Buducnost Pythonu: lambda, map, filter)

2006-11-14 Tema obsahu superman
 Díky za reakci,
 dle mého nedišputovatelného gusta uvedené věty s vyjímkou
   Simple is better than complex
   Although practicality beats purity
 svědčí spíš pro styl xreadlines hlavně proto že tam je ten slovní základ
 lines.

Já s tím také souhlasím. Ale pokud je xreadlines jenom deprecated, pak 
nic nenamítám, pokud tam zůstane. V takové Javě jsou deprecated věci 
klidně už desátým rokem, ale nikdo si je nedovolí vyhodit.

Jinak se mi vůbec nelíbí ten Perlovský implicitní styl, kdy prostě každý 
objekt v nějakém kontextu něco nečekaného (rozuměj implicitního) 
provede. Čím dál víc se mi zdá, že GvR se bohužel asi v Perlu vidí. 
Takto mohou také vznikat dost ošklivé chyby a k=od se stane hůře 
udržovatelným.

 Avšak souhlasím s názorem, že soubory se čtou většinou po řádcích takže je
 to takto praktické ale mám z toho pocit vyjímky která se mi nelíbí.

Problém je v tom, že zadrátovat do jazyka konstrukci, která ušetří 
několik písmenek je sice praktické, ale nedobré. Nechť je prostě všechni 
vidět. Pokud se soubory mohou číst i jinak, než po řádcích, což se děje 
velmi často, tak bych tyto zjednodušující konstrukce do jazyka vůbec 
nedával.

Miloslav Ponkrác
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] file.next() (bylo Buducnost Pythonu: lambda, map, filter)

2006-11-14 Tema obsahu Jan Matejka
Ono obecnější řešení je udělat parsovací generátory, které by šly použít s
čímkoliv file-like jako vstupním prametrem, a nestrkat parsování to objektu
file. Tedy:

místo
 for line in file(data.txt).lines():
  ...

by bylo:
for line in lines(file(data.txt)):
 ...

místo
 #cteni po UTF znacich
 for char in file(data.txt).chars():

by bylo:
for char in chars(file(data.txt)):

atd.

Výpočetní náročnost by zústala stejná. Generátory mi přijdou jako skvělý
nástroj, škoda že se GvR brání zobecnění do více úrovní zanoření jenž nabízí
stackless python. 

Jan Matějka

___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] file.next() (bylo Buducnost Pythonu: lambda, map, filter)

2006-11-14 Tema obsahu Petr Přikryl
radek napsal(a):
  Avšak souhlasím s názorem, že soubory se čtou 
  většinou po řádcích  takže je
  to takto praktické ale mám z toho pocit vyjímky která se mi nelíbí.

 Problém je v tom, že zadrátovat do jazyka konstrukci, která ušetří
 několik písmenek je sice praktické, ale nedobré. Nechť je prostě všechni
 vidět. Pokud se soubory mohou číst i jinak, než po řádcích, což se děje
 velmi často, tak bych tyto zjednodušující konstrukce do jazyka vůbec
 nedával.

 
 Presne tak, priklady, jak by to vypadalo jinak:
 
 #cteni po radcich s defaultnim line oddelovacem (jak je ted)
 for line in file(data.txt).lines():
 ...
 
 #cteni po radcich, ktere jsou oddelene oddelovacem br
 for line in file(data.txt).lines(br):
 [...]

Ale definice, že řádek v textovém souboru je ukončen
br jaksi není obecně přijímaná. Když chci, musím
si to napsat sám a nebo použít odpovídající parser.


Jan Matějka
 Ono obecnější řešení je udělat parsovací generátory, které by šly použít s
 čímkoliv file-like jako vstupním prametrem, a nestrkat parsování to objektu
 file. Tedy: [...]
 
 for line in lines(file(data.txt)):
  ...
 [...] atd.
 
 Výpočetní náročnost by zústala stejná. Generátory mi přijdou jako skvělý
 nástroj, škoda že se GvR brání zobecnění do více úrovní zanoření jenž nabízí
 stackless python. 

Ale vdyť mi nic nebrání zpracovávat soubor po znacích.

# Vygenerujeme si testovaci textovy soubor.
f = open('test.txt', 'w')
for i in xrange(3):
 f.write('Line %d.\n' % i)
f.close()


# Pruchod po znacich.

f = open('test.txt')
c = 'init'
while c != '':
 c = f.read(1)
 print c
f.close()

A nic mi nebrání napsat generátor, který vezme a bude vracet znaky
a použít ho:

def chargen(f):
 c = 'init'
 while c != '':
 c = f.read(1)
 yield c

for c in chargen(file('test.txt')):
 print c

A můžu si napsat jakýkoliv jiný generátor/parser.

pepr
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python