Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ruby %w equivalent

314 views
Skip to first unread message

Antoine De Groote

unread,
Sep 24, 2006, 5:35:55 PM9/24/06
to pytho...@python.org
Hi everybody,

is there a python equivalent for the ruby %w operator?
%w{a b c} creates an array with strings "a", "b", and "c" in ruby...

Thanks a lot
Regards,
antoine

John Machin

unread,
Sep 24, 2006, 6:32:20 PM9/24/06
to
Antoine De Groote wrote:

>
> is there a python equivalent for the ruby %w operator?
> %w{a b c} creates an array with strings "a", "b", and "c" in ruby...
>

| >>> "a b c".split()
| ['a', 'b', 'c']

... appears to match your single example.

HTH,
John

Robert Kern

unread,
Sep 24, 2006, 6:34:41 PM9/24/06
to pytho...@python.org
Antoine De Groote wrote:
> Hi everybody,

>
> is there a python equivalent for the ruby %w operator?
> %w{a b c} creates an array with strings "a", "b", and "c" in ruby...

I assume that

['a', 'b', 'c']

isn't what you are looking for. How does

'a b c'.split()

strike you?

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco

p.la...@ieee.org

unread,
Sep 24, 2006, 6:35:14 PM9/24/06
to
> is there a python equivalent for the ruby %w operator?
> %w{a b c} creates an array with strings "a", "b", and "c" in ruby...

The expression 'a b c'.split() creates the ['a', 'b', 'c'] list of str,
if that helps.

Also dir('a b c') briefly lists much of what
http://docs.python.org/lib/string-methods.html explains.

Also Google was curiously resistant to telling me where Ruby's %w is
documented.

Pat LaVarre

John Machin

unread,
Sep 24, 2006, 6:46:37 PM9/24/06
to

p.la...@ieee.org wrote:
>
> Also Google was curiously resistant to telling me where Ruby's %w is
> documented.
>

You would need to dig into your Google toolbar config and un-tick
"YAGNI filter".

Tim Chase

unread,
Sep 24, 2006, 6:49:30 PM9/24/06
to John Machin, pytho...@python.org
>> is there a python equivalent for the ruby %w operator?
>> %w{a b c} creates an array with strings "a", "b", and "c" in ruby...
>>
>
> | >>> "a b c".split()
> | ['a', 'b', 'c']
>
> ... appears to match your single example.

bah, far to easy to understand...add a little line-noise, man,
and it will be closer to ruby/perl.

Maybe something like

>>> from string import split as _
>>> _("a b c")


['a', 'b', 'c']

or perhaps

>>> "a b c".split
>>> _()


['a', 'b', 'c']

to give it that perl/ruby-ish feel of terseness and obscurity.

And people wonder why I like python... :)

-tkc


MonkeeSage

unread,
Sep 24, 2006, 11:47:24 PM9/24/06
to
Tim Chase wrote:
> to give it that perl/ruby-ish feel of terseness and obscurity.

Don't feel bad, you always have things like r'%s\%s' % (u'blah',
u'blah') and so on. But of course, it's only the other guys who are
evil / ugly / stupid. As the human torch says, "Flame On". :)

[Full disclosure: I like ruby _and_ I like python (gasp!), and see no
need to artificially criticize one or the other; I try rather to
utilize the strengths of both.]

Regards,
Jordan

hg

unread,
Sep 25, 2006, 3:16:31 PM9/25/06
to

Why would they want to make such an obscure API ? ... didn't they have
Python to learn from (I am truly amazed - nothing cynical ...just ...
why ?!!!!)

MonkeeSage

unread,
Sep 25, 2006, 3:59:48 PM9/25/06
to
hg wrote:
> Why would they want to make such an obscure API ? ... didn't they have
> Python to learn from (I am truly amazed - nothing cynical ...just ...
> why ?!!!!)

In ruby there are several special literal notations, just like python.
In ruby it goes like this:

%{blah} / %Q{blah} # same as "blah" but igornes " and '
%q{blah} # same as 'blah' but no interpolation
%w{blah blah} # same as "blah blah".split
%r{blah} # same as /blah/
%x{ls} # same as `ls`

Sometimes they are very useful, and sometimes they are cumbersome. It's
up to the programmer to implement them effectively.

Regards,
Jordan

hg

unread,
Sep 25, 2006, 4:17:04 PM9/25/06
to
I am certain Ruby is a very effective language (I read much good stuff
about it) ... it's just that I cannot comprehend why a "new" language
would attempt so hard to look like assembly.


Regards,

hg

Thorsten Kampe

unread,
Sep 25, 2006, 4:25:45 PM9/25/06
to
* John Machin (24 Sep 2006 15:32:20 -0700)

Something wrong with "list('abc')"? Or is it too simple?!

Thorsten

hg

unread,
Sep 25, 2006, 4:23:49 PM9/25/06
to
To further comment: back to the PDP11 and such guys, there was a true
need to "terse" the language and give the computer a break ... "what
I've already calculated, the computer needs not to calculate ... plus
I'm avoiding potential software(assembler/compiler) bugs"

But today ? what is the cost of replacing %w("blah blah") by
Hi_I_Want_To_Split_The_String_That_Follows( "blah blah")

Georg Brandl

unread,
Sep 25, 2006, 4:36:49 PM9/25/06
to

It is quite unreliable for strings consisting of more than one char... ;)

Georg

MonkeeSage

unread,
Sep 25, 2006, 5:03:28 PM9/25/06
to
hg wrote:
> But today ? what is the cost of replacing %w("blah blah") by
> Hi_I_Want_To_Split_The_String_That_Follows( "blah blah")

How about r'blah', u'blah', """blah""", and '''blah'''. :)

Regards,
Jordan

Wildemar Wildenburger

unread,
Sep 25, 2006, 5:31:08 PM9/25/06
to pytho...@python.org

C'mon, the last two really don't count.

wildemar

hg

unread,
Sep 25, 2006, 5:25:56 PM9/25/06
to


Some truth to that !

Antoine De Groote

unread,
Sep 26, 2006, 6:06:38 AM9/26/06
to

As far as I can tell this works for single characters only. You're not
able to split words, as in "one two three".split().

Regards,
antoine

Antoine De Groote

unread,
Sep 26, 2006, 6:13:34 AM9/26/06
to

And this is what Georg Brandl already posted. Sorry!

Thorsten Kampe

unread,
Sep 26, 2006, 5:56:06 PM9/26/06
to
* Antoine De Groote (Tue, 26 Sep 2006 12:06:38 +0200)

It does satisfy your example in your first posting nevertheless.

Thorsten

Nick Craig-Wood

unread,
Sep 27, 2006, 4:30:04 AM9/27/06
to
MonkeeSage <Monke...@gmail.com> wrote:
> In ruby there are several special literal notations, just like python.
> In ruby it goes like this:
>
> %{blah} / %Q{blah} # same as "blah" but igornes " and '
> %q{blah} # same as 'blah' but no interpolation
> %w{blah blah} # same as "blah blah".split
> %r{blah} # same as /blah/
> %x{ls} # same as `ls`

These are snatched straight from perl. In perl they are spelt
slightly differently

q{blah} r"""blah""" # not identical but similar
qq{blah} """blah""" # no interpolation in python so no direct concept
qw{blah blah} "blah blah".split()
qr{blah} re.compile(r"blah")
qx{ls} commands.getoutput("ls")

In perl (and maybe in ruby I don't know) the { } can be replaced with
any two identical chars, or the matching pair if bracketty, so q/blah/
or q(blah).

As a perl refugee, the only one I miss at all is qw{}, ie %w{} in ruby
the subject of this post.

In python when making __slots__ or module.__all__ you end up typing
lists of objects or methods and they turn out like this which is quite
a lot of extra typing

__slots__ = ["method1", "method2", "method3", "method4", "method5"]

You can of course write it like this

__slots__ = "method1 method2 method3 method4 method5".split()

which is nearly as neat as qw//, but not quite since the split() bit
comes at the end so it doesn't notify you that you have an array of
strings rather than a string.

I don't expect a replacement for %w{}, qw// to ever be added to
python, it is not the python way. And the python way is why I am now
a python programmer not a perl programmer!

--
Nick Craig-Wood <ni...@craig-wood.com> -- http://www.craig-wood.com/nick

Duncan Booth

unread,
Sep 27, 2006, 5:03:46 AM9/27/06
to
Nick Craig-Wood <ni...@craig-wood.com> wrote:

> In python when making __slots__ or module.__all__ you end up typing
> lists of objects or methods and they turn out like this which is quite
> a lot of extra typing
>
> __slots__ = ["method1", "method2", "method3", "method4", "method5"]
>
>

For __all__ you can use a decorator to avoid retyping the function name at
all. e.g.

def public(f):
all = f.func_globals.setdefault('__all__', [])
all.append(f.__name__)
return f

@public
def foo(): pass

I don't use __slots__ much at all, and if you'd said "attribute1" etc. I'd
have understood, but I'm really curious why would you be listing any
methods in __slots__?

Piet van Oostrum

unread,
Sep 27, 2006, 6:38:58 AM9/27/06
to
>>>>> hg <h...@nospam.com> (A) wrote:

>A> Antoine De Groote wrote:
>>> Hi everybody,
>>>
>>> is there a python equivalent for the ruby %w operator?
>>> %w{a b c} creates an array with strings "a", "b", and "c" in ruby...
>>>
>>> Thanks a lot
>>> Regards,
>>> antoine

>A> Why would they want to make such an obscure API ? ... didn't they have
>A> Python to learn from (I am truly amazed - nothing cynical ...just ...
>A> why ?!!!!)

I think it is modeled after Perl.
--
Piet van Oostrum <pi...@cs.uu.nl>
URL: http://www.cs.uu.nl/~piet [PGP 8DAE142BE17999C4]
Private email: pi...@vanoostrum.org

Antoine De Groote

unread,
Sep 27, 2006, 8:27:30 AM9/27/06
to

Absolutely :-)

Nick Craig-Wood

unread,
Sep 27, 2006, 11:30:03 AM9/27/06
to
Duncan Booth <duncan...@invalid.invalid> wrote:
> Nick Craig-Wood <ni...@craig-wood.com> wrote:
>
> > In python when making __slots__ or module.__all__ you end up typing
> > lists of objects or methods and they turn out like this which is quite
> > a lot of extra typing
> >
> > __slots__ = ["method1", "method2", "method3", "method4", "method5"]
>
> For __all__ you can use a decorator to avoid retyping the function name at
> all. e.g.
>
> def public(f):
> all = f.func_globals.setdefault('__all__', [])
> all.append(f.__name__)
> return f
>
> @public
> def foo(): pass

Nice one!

> I don't use __slots__ much at all, and if you'd said "attribute1" etc. I'd
> have understood, but I'm really curious why would you be listing any
> methods in __slots__?

Those should of course have been attributes - I noticed immediately
after posting ;-)

Aside: __slots__ is only really useful when you've created so many
objects you are running out of memory and you need to optimise memory
usage a bit. We got our app down to 1/3 of the memory usage by
putting in three __slots__

MonkeeSage

unread,
Sep 30, 2006, 5:05:34 AM9/30/06
to
Nick Craig-Wood wrote:
> These are snatched straight from perl. In perl they are spelt
> slightly differently

Yup, they are; perl had _some_ good ideas; no doubt. ;)

> In perl (and maybe in ruby I don't know) the { } can be replaced with
> any two identical chars, or the matching pair if bracketty, so q/blah/
> or q(blah).

Yes; same thing in ruby.

Regards,
Jordan

James Stroud

unread,
Sep 30, 2006, 6:15:40 AM9/30/06
to
hg wrote:
> But today ? what is the cost of replacing %w("blah blah") by
> Hi_I_Want_To_Split_The_String_That_Follows( "blah blah")

The latter is beginning to look like the Cocoa/NextStep framework.
Perhaps we should give up scripting languages for ObjC?

James

0 new messages