Article View: pl.comp.lang.python
Article #28344Re: Prośba o wytknięcie błędów
From: Adam Przybyla
Date: Tue, 15 Nov 2011 15:55
Date: Tue, 15 Nov 2011 15:55
58 lines
3469 bytes
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-mailReferences:
<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