map in Python
Pierre Barbier de Reuille
pierre.barbier at cirad.fr
Fri Jan 21 07:52:18 EST 2005
You have three ways to do what you want :
First wayt is to use lambda. Then, you want to write :
>>> map(lambda x: re.sub("[a-z]", "", x), test)
Second is to use regular named function :
>>> def remove_letters( s ):
... re.sub("[a-z]", "", s)
>>> map(remove_letters, test)
A third way would be to use the "pseudo-currying" described there :
http://www.python.org/moin/PythonDecoratorLibrary
In fact, you need a small generalisation :
>>> class curried(object):
... def __init__(self, func, *a, **kw):
... self.func = func
... self.args = a
... self.kwords = kw
... def __call__(self, *a, **kw):
... args = self.args + a
... kwords = dict(self.kwords)
... kwords.update(kw)
... if len(args)+len(kwords) < self.func.func_code.co_argcount:
... return curried(self.func, *args, **kwords)
... else:
... return self.func(*args, **kwords)
The difference is you can handle the kwords with that version !
Then you want to write this :
>>> curried_sub = curried(re.sub)
>>> map(curried_sub("[a-z]", "", count=0), test)
My opinion is : the simplest and best solution more "pythonic" is the
second one ! The third one is interesting but work only for functions
written in Python ! (Hopefully the re.sub function is written in
Python). The biggest problem with the first one is that lambda are
planned to disappear in future Python versions ...
Pierre
Stu a écrit :
> I have recently switched over to Python from Perl. I want to do
> something like this in Python:
>
> @test = ("a1", "a2", "a3");
> map {s/[a-z]//g} @test;
> print @test;
>
> However, I take it there is no equivalent to $_ in Python. But in that
> case how does map pass the elements of a sequence to a function? I
> tried the following, but it doesn't work because the interpreter
> complains about a missing third argument to re.sub.
>
> import re
> test = ["a1", "a2", "a3"]
> map(re.sub("[a-z]", ""), test)
> print test
> Thanks in advance.
>
> Regards,
> Stuart <stuart AT zapata DOT org>
>
More information about the Python-list
mailing list