🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #28344

Re: Prośba o wytknięcie błędów

#28344
From: Adam Przybyla
Date: Tue, 15 Nov 2011 15:55
58 lines
3469 bytes
hubert depesz lubaczewski <depesz@depesz.com> wrote:
> On 2011-11-15, Adam Przybyla <adam@rybnik.pl> wrote:
>>> def calculate_hash( filename ):
>>>    f = open( filename, 'r' )
>>>    mail = email.message_from_file( f )
>>>    keep_headers =  ( 'subject', 'from', 'to', 'cc', 'in-reply-to', 'references', 'date', 'message-id', 'content-type', 'mime-version' )
>>>    for h in mail.keys():
>>>        if h.lower() not in keep_headers:
>>>            del mail[ h ]
>>>    return sha256( mail.as_string() ).hexdigest()
>>       ... mozna to napisac krocej:
>> def calculate_hash( filename ):
>>       mail=email.message_from_file(open(filename))
>>       [mail.__delitem__(h) for h in mail.keys() if h.lower not in keep_headers]
>>       return sha256( mail.as_string() ).hexdigest()
> 
> ej, to ma być python a nie perl :)
	... chcialem abys poczul sie bardziej swojsko;-))

> a tak bardziej serio - wiem, że można wywalić część zmiennych (f), ale
> nie za bardzo lubię robić kilka operacji na raz, w jednym poleceniu
> (mówię o open/message_from_file).
> 
> co do mail.__delitem__ w []
> 
> z tym [] ( to się chyba nazywa list comprehension? )
> mam problem koncepcyjny.
> tzn. jak pisałem w perlu, to tam mamy podobny mechanizm, nazywa się map.
> i podobnie jak ten trick z [] zwraca arraya/listę.
> we wszystkich materiałach o stylu programowania piszą by nie używać map
> ignorując rezultat (czyli np. nie przypisując go gdzieś, traktując go po
> prostu jako jednoliniową pętlę).
> i to mi się mocno wtłoczyło w mózg.
> tak więc teraz patrząc na 
> [ ... for ... if ... ]
> mam odruch odrzutny, bo to jest właśnie ignorowanie rezultatu.
> może powinienem się przełamać.
	... ale tu maz zalete, bo mozesz pisac np. tak:
>>> (x for x in xrange(10))
<generator object at 0x99ca34c>
>>> 

>>> type([x for x in range(10)])
<type 'list'>
>>> type((x for x in range(10)))
<type 'generator'>
>>> 

i zamiast tablicy zwraca ci ... generator tablicy - znaczit lazy evaluation;-)
a map, reduce filter tez jest:
map(lambda h: mail.__delitem__(h), filter(lambda h1:  h1.lower not in keep_headers,mail.keys))
> 
> dodatkowe pytanie - czy korzystanie bezpośrednio z __funkcji__ jest ok?
> z tego co zrozumiałem, to są wewnętrznie używane funkcje które służą do
> implementacji operatorów. dostęp do nich jest, ale wydawało mi się, że
> używanie ich bezpośrednio jest jakieś "niekoszerne". myliłem się?
	... ale dziala;-) Z powazaniem
								Adam Przybyla
Technical Details
Message-ID: <j9u21k$s76$1@polsl.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!polsl.pl!not-for-mail
References: <2h09p8-kgk.ln1@depesz.com> <j9ta7o$7ae$2@polsl.pl> <it8ap8-uiv.ln1@depesz.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!polsl.pl!not-for-mail
From: Adam Przybyla <adam@rybnik.pl>
Newsgroups: pl.comp.lang.python
Subject: Re: Prośba o
 wytknięcie błędów
Date: Tue, 15 Nov 2011 15:55:32 +0000 (UTC)
Organization: Politechnika Slaska, Gliwice
Lines: 58
Sender: Adam Przybyla <adam@smtp.ertel.com.pl>
Message-ID: <j9u21k$s76$1@polsl.pl>
References: <2h09p8-kgk.ln1@depesz.com> <j9ta7o$7ae$2@polsl.pl> <it8ap8-uiv.ln1@depesz.com>
NNTP-Posting-Host: smtp.ertel.com.pl
Mime-Version: 1.0
X-Trace: polsl.pl 1321372532 28902 62.182.231.178 (15 Nov 2011 15:55:32 GMT)
X-Complaints-To: news@polsl.pl
NNTP-Posting-Date: Tue, 15 Nov 2011 15:55:32 +0000 (UTC)
User-Agent: tin/1.8.3-20070201 ("Scotasay") (UNIX) (Linux/2.6.18-194.8.1.el5xen (i686))
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit