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>

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to