Showing content from http://mail.python.org/pipermail/python-dev/attachments/20031013/a4413f54/attachment.html below:
<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 10">
<meta name=Originator content="Microsoft Word 10">
<link rel=File-List href="cid:filelist.xml@01C3919F.74E81420">
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
name="place"/>
<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:GrammarState>Clean</w:GrammarState>
<w:DocumentKind>DocumentEmail</w:DocumentKind>
<w:EnvelopeVis/>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
 panose-1:5 0 0 0 0 0 0 0 0 0;
 mso-font-charset:2;
 mso-generic-font-family:auto;
 mso-font-pitch:variable;
 mso-font-signature:0 268435456 0 0 -2147483648 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
 margin:0in;
 margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:12.0pt;
 font-family:"Times New Roman";
 mso-fareast-font-family:"Times New Roman";}
a:link, span.MsoHyperlink
{color:blue;
 text-decoration:underline;
 text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
{color:purple;
 text-decoration:underline;
 text-underline:single;}
span.EmailStyle17
{mso-style-type:personal-compose;
 mso-style-noshow:yes;
 mso-ansi-font-size:10.0pt;
 mso-bidi-font-size:10.0pt;
 font-family:Arial;
 mso-ascii-font-family:Arial;
 mso-hansi-font-family:Arial;
 mso-bidi-font-family:Arial;
 color:windowtext;}
span.SpellE
{mso-style-name:"";
 mso-spl-e:yes;}
span.GramE
{mso-style-name:"";
 mso-gram-e:yes;}
@page Section1
{size:8.5in 11.0in;
 margin:1.0in 1.25in 1.0in 1.25in;
 mso-header-margin:.5in;
 mso-footer-margin:.5in;
 mso-paper-source:0;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:1294216520;
 mso-list-type:hybrid;
 mso-list-template-ids:423247172 1779071476 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
{mso-level-start-at:0;
 mso-level-number-format:bullet;
 mso-level-text:\F0B7;
 mso-level-tab-stop:.5in;
 mso-level-number-position:left;
 text-indent:-.25in;
 font-family:Symbol;
 mso-fareast-font-family:"Times New Roman";
 mso-bidi-font-family:Arial;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-parent:"";
 mso-padding-alt:0in 5.4pt 0in 5.4pt;
 mso-para-margin:0in;
 mso-para-margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:10.0pt;
 font-family:"Times New Roman";}
</style>
<![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple style='tab-interval:.5in'>
<div class=Section1>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'>For Py2.4, I propose adding an optional <span class=SpellE><span
class=GramE>list.sort</span></span><span class=GramE>(</span>) argument to support
the decorate-sort-<span class=SpellE>undecorate</span> pattern.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'>The current, pure Python approach to DSU is pure <span
class=SpellE>arcana</span>.<span style='mso-spacerun:yes'> </span>It is
obscure enough and cumbersome enough that <span class=SpellE><span class=GramE>cmpfunc</span></span><span
class=GramE>(</span>) tends to get used instead.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'>Built-in C support for DSU requires much less skill to use, results
in more readable code, and runs faster.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'>Raymond Hettinger<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'>------ Concept <span class=SpellE>demonstraton</span>
------------------<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>def</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'> sort(self, <span
class=SpellE>cmpfunc</span>=None, decorator=None):<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><span style='mso-spacerun:yes'>
</span>"””Show how <span class=SpellE><span class=GramE>list.sort</span></span><span
class=GramE>(</span>) could support a decorating function”””<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><span style='mso-spacerun:yes'> </span><span
class=GramE>args</span> = ()<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><span style='mso-spacerun:yes'> </span><span
class=GramE>if</span> <span class=SpellE>cmpfunc</span> is not None:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><span
style='mso-spacerun:yes'> </span><span
class=GramE>args</span> = (<span class=SpellE>cmpfunc</span>,)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><span style='mso-spacerun:yes'> </span><span
class=GramE>if</span> decorator is None:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><span
style='mso-spacerun:yes'> </span><span
class=SpellE><span class=GramE>self.sort</span></span><span class=GramE>(</span>*args)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><span style='mso-spacerun:yes'> </span><span
class=GramE>else</span>:<span
style='mso-spacerun:yes'> </span><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><span
style='mso-spacerun:yes'> </span><span
class=GramE>aux</span> = zip(map(decorator, self), self)<span
style='mso-spacerun:yes'> </span># Decorate<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><span
style='mso-spacerun:yes'> </span><span
class=SpellE><span class=GramE>aux.sort</span></span><span class=GramE>(</span>*args)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><span
style='mso-spacerun:yes'> </span><span
class=GramE>self[</span>:] = list(zip(*aux)[1])<span
style='mso-spacerun:yes'> </span>#
Un-decorate<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'>a = 'the Quick brown Fox jumped Over the Lazy <span
class=SpellE>Dog'.<span class=GramE>split</span></span><span class=GramE>()</span><o:p></o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>sort(</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>a)<span
style='mso-tab-count:3'> </span><span
style='mso-spacerun:yes'> </span># the no
argument form is unchanged<o:p></o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>print</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'> a, '</span></font><st1:place><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>Normal</span></font></st1:place><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'> sort'<o:p></o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>sort(</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>a, lambda <span
class=SpellE>x,y</span>: -<span class=SpellE>cmp</span>(<span class=SpellE>x,y</span>))<span
style='mso-spacerun:yes'> </span># old code still works
without change<o:p></o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>print</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'> a, 'Reverse
sort'<o:p></o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>sort(</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>a,
decorator=<span class=SpellE>str.lower</span>)<span
style='mso-spacerun:yes'> </span><span
style='mso-spacerun:yes'> </span># the new way is
fast, clean, and readable<o:p></o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>print</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'> a,
'Lowercase sort'<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'># <span class=GramE>The</span> decorator form works
especially well with mappings so that database<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'># <span class=GramE>keys</span> can be sorted by any field. <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>ages</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'> = <span
class=SpellE>dict</span>(john=5, <span class=SpellE>amy</span>=3, <span
class=SpellE>andrea</span>=32, <span class=SpellE>henry</span>=12)<o:p></o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>names</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'> = <span
class=SpellE>ages.keys</span>()<o:p></o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>location</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'> = <span
class=SpellE>dict</span>(john='<span class=SpellE>alaska</span>', <span
class=SpellE>amy</span>='<span class=SpellE>spain</span>', <span class=SpellE>andrea</span>='<span
class=SpellE>peru</span>', <span class=SpellE>henry</span>='<span class=SpellE>iowa</span>')<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>sort(</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>names)<o:p></o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>print</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'> names,
'<-- by name'<o:p></o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>sort(</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>names,
decorator=<span class=SpellE>ages.__getitem</span>__)<o:p></o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>print</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'> names,
'<-- by age'<o:p></o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>sort(</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>names,
decorator=<span class=SpellE>location.__getitem</span>__)<o:p></o:p></span></font></p>
<p class=MsoNormal><span class=GramE><font size=2 face=Arial><span
style='font-size:10.0pt;font-family:Arial'>print</span></font></span><font
size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'> names,
'<-- by location'<o:p></o:p></span></font></p>
</div>
</body>
</html>
RetroSearch is an open source project built by @garambo
| Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4