By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,885 Members | 1,474 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,885 IT Pros & Developers. It's quick & easy.

ruby %w equivalent

P: n/a
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
Sep 24 '06 #1
Share this Question
Share on Google+
24 Replies


P: n/a
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

Sep 24 '06 #2

P: n/a
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

Sep 24 '06 #3

P: n/a

p.*******@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".

Sep 24 '06 #4

P: n/a
>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


Sep 24 '06 #5

P: n/a
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

Sep 25 '06 #6

P: n/a
hg
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
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 ?!!!!)
Sep 25 '06 #7

P: n/a
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

Sep 25 '06 #8

P: n/a
hg
MonkeeSage wrote:
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
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

Sep 25 '06 #9

P: n/a
* John Machin (24 Sep 2006 15:32:20 -0700)
>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.
Something wrong with "list('abc')"? Or is it too simple?!

Thorsten
Sep 25 '06 #10

P: n/a
hg
hg wrote:
MonkeeSage wrote:
>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
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
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")
Sep 25 '06 #11

P: n/a
Thorsten Kampe wrote:
* John Machin (24 Sep 2006 15:32:20 -0700)
>>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.

Something wrong with "list('abc')"? Or is it too simple?!
It is quite unreliable for strings consisting of more than one char... ;)

Georg
Sep 25 '06 #12

P: n/a
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

Sep 25 '06 #13

P: n/a
MonkeeSage wrote:
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'''. :)
C'mon, the last two really don't count.

wildemar
Sep 25 '06 #14

P: n/a
hg
MonkeeSage wrote:
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

Some truth to that !
Sep 25 '06 #15

P: n/a
Thorsten Kampe wrote:
* John Machin (24 Sep 2006 15:32:20 -0700)
>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.

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

Thorsten
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
Sep 26 '06 #16

P: n/a
Antoine De Groote wrote:
Thorsten Kampe wrote:
>* John Machin (24 Sep 2006 15:32:20 -0700)
>>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.

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

Thorsten

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
And this is what Georg Brandl already posted. Sorry!
Sep 26 '06 #17

P: n/a
* Antoine De Groote (Tue, 26 Sep 2006 12:06:38 +0200)
>Thorsten Kampe wrote:
>* John Machin (24 Sep 2006 15:32:20 -0700)
>>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.

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

Thorsten

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().
It does satisfy your example in your first posting nevertheless.

Thorsten
Sep 26 '06 #18

P: n/a
MonkeeSage <Mo********@gmail.comwrote:
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
Sep 27 '06 #19

P: n/a
Nick Craig-Wood <ni**@craig-wood.comwrote:
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__?
Sep 27 '06 #20

P: n/a
>>>>hg <hg@nospam.com(A) wrote:
>AAntoine 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
>AWhy would they want to make such an obscure API ? ... didn't they have
APython to learn from (I am truly amazed - nothing cynical ...just ...
Awhy ?!!!!)
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
Sep 27 '06 #21

P: n/a
Thorsten Kampe wrote:
* Antoine De Groote (Tue, 26 Sep 2006 12:06:38 +0200)
>Thorsten Kampe wrote:
>>* John Machin (24 Sep 2006 15:32:20 -0700)
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.
Something wrong with "list('abc')"? Or is it too simple?!

Thorsten
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().

It does satisfy your example in your first posting nevertheless.

Thorsten
Absolutely :-)
Sep 27 '06 #22

P: n/a
Duncan Booth <du**********@invalid.invalidwrote:
Nick Craig-Wood <ni**@craig-wood.comwrote:
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__

--
Nick Craig-Wood <ni**@craig-wood.com-- http://www.craig-wood.com/nick
Sep 27 '06 #23

P: n/a
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

Sep 30 '06 #24

P: n/a
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
Sep 30 '06 #25

This discussion thread is closed

Replies have been disabled for this discussion.