76 lines
2.5 KiB
Plaintext
76 lines
2.5 KiB
Plaintext
From: akuchlin at cnri.reston.va.us (Andrew M. Kuchling)
|
|
Date: Fri, 23 Apr 1999 09:59:20 -0400 (EDT)
|
|
Subject: opening more than 1 file
|
|
In-Reply-To: <7fpteh$cik$1@news1.xs4all.nl>
|
|
References: <371CB255.5FCAFBAF@solair1.inter.NL.net>
|
|
<371CCAE0.7DE87F8A@aw.sgi.com>
|
|
<7fpteh$cik$1@news1.xs4all.nl>
|
|
Message-ID: <14112.31139.164770.168982@amarok.cnri.reston.va.us>
|
|
Content-Length: 2095
|
|
X-UID: 766
|
|
|
|
Gornauth writes:
|
|
>>files = map(lambda i: open("file%02d"%i, 'w'), range(N))
|
|
>
|
|
>I'm not completely sure how that one-liner works. To be honest, I have no
|
|
>clue whatsoever.
|
|
|
|
It would be equally workable to just use a for loop:
|
|
|
|
files = []
|
|
for i in range(N):
|
|
files.append( open("file%02d"%i, 'w') )
|
|
|
|
Using map() is tricky, but lets you keep the line count down;
|
|
generally one shouldn't care too much about line count. :)
|
|
Take it step by step:
|
|
|
|
* What does range(N) do? It returns a list containing the
|
|
numbers 0,1,2, ... that are less than N. range(5) returns [0, 1, 2,
|
|
3, 4].
|
|
|
|
* What does map() do? map(F, L), where F is some function and
|
|
L is some list (actually, any sequence type) returns a new list
|
|
containing the result of F applied to each element of L.
|
|
|
|
map(F, range(N)) returns [ F(0), F(1), ... F(N-1) ].
|
|
map(string.upper, ["This", "is", "a", "test"] ) returns
|
|
['THIS', 'IS', 'A', 'TEST']
|
|
|
|
* What does lambda do? It defines a function which doesn't
|
|
have a name (it's an anonymous function), and can only contain an
|
|
expression whose value is returned. It's possible to assign the
|
|
anonymous function to a name, and it will act like any other Python
|
|
function.
|
|
|
|
>>>f = lambda x: x+1
|
|
>>> f(0)
|
|
1
|
|
>>> f(3)
|
|
4
|
|
|
|
However, to define a named function it's clearer to just use
|
|
def f(x): return x+1 . lambda is therefore usually used with map()
|
|
and its cousins filter() and reduce(), where you often need a function
|
|
which does something simple. In that case, the function is only
|
|
needed for that one map(), so people are reluctant to write:
|
|
|
|
def opener(i): return open("file%02d"%i, 'w')
|
|
files = map(opener, range(N) )
|
|
|
|
The above two lines are equivalent to the one-liner using lambda; the
|
|
only difference is that now there's an opener() function lying around
|
|
in the namespace.
|
|
|
|
--
|
|
A.M. Kuchling http://starship.python.net/crew/amk/
|
|
... but whenever optimization comes up, people get sucked into debates about
|
|
exciting but elaborate schemes not a one of which ever gets implemented;
|
|
better to get an easy 2% today than dream about 100% forever.
|
|
-- Tim Peters, 22 Mar 1998
|
|
|
|
|
|
|
|
|
|
|