Java singletonMap in Python

M

Mark Lawrence

Purely for fun I've been porting some code to Python and came across the
singletonMap[1]. I'm aware that there are loads of recipes on the web
for both singletons e.g.[2] and immutable dictionaries e.g.[3]. I was
wondering how to combine any of the recipes to produce the best
implementation, where to me best means cleanest and hence most
maintainable. I then managed to muddy the waters for myself by
recalling the Alex Martelli Borg pattern[4]. Possibly or even probably
the latter is irrelevant, but I'm still curious to know how you'd code
this beast.

First prize for the best solution is a night out with me, no guesses
what the second prize is :)

[1]http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html
[2]http://stackoverflow.com/questions/...le-elegant-way-to-define-singletons-in-python
[3]http://code.activestate.com/recipes/498072-implementing-an-immutable-dictionary/
[4]http://code.activestate.com/recipes/66531-singleton-we-dont-need-no-stinkin-singleton-the-bo/
 
S

Steven D'Aprano

Purely for fun I've been porting some code to Python and came across the
singletonMap[1]. I'm aware that there are loads of recipes on the web
for both singletons e.g.[2] and immutable dictionaries e.g.[3]. I was
wondering how to combine any of the recipes to produce the best
implementation, where to me best means cleanest and hence most
maintainable. I then managed to muddy the waters for myself by
recalling the Alex Martelli Borg pattern[4]. Possibly or even probably
the latter is irrelevant, but I'm still curious to know how you'd code
this beast.

First prize for the best solution is a night out with me, no guesses
what the second prize is :)

[1]http://docs.oracle.com/javase/1.4.2/docs/api/java/util/
Collections.html

Copied from that page:

"static Map singletonMap(Object key, Object value)
Returns an immutable map, mapping only the specified key to the specified
value."

I don't see the point of this. It takes a single key, with a single
value, and is immutable so you can't change it or add new keys. What's
the point? Why bother storing the key:value pair in a data structure,
then look up the same data structure to get the same value every time?

# Pseudo-code
d = singletonMap(key, calculate(key))
# later:
value = d[key] # there's only one key this could be
process(value)


Why not just store the value, instead of key, value and mapping?

value = calculate(key)
# later
process(value)
 
8

88888 Dihedral

Duncan Boothæ–¼ 2012å¹´9月25日星期二UTC+8上åˆ1時33分31秒寫é“:
Purely for fun I've been porting some code to Python and came across
the singletonMap[1]. I'm aware that there are loads of recipes on
the web for both singletons e.g.[2] and immutable dictionaries
e.g.[3]. I was wondering how to combine any of the recipes to
produce the best implementation, where to me best means cleanest and
hence most maintainable. I then managed to muddy the waters for
myself by recalling the Alex Martelli Borg pattern[4]. Possibly or
even probably the latter is irrelevant, but I'm still curious to know
how you'd code this beast.

First prize for the best solution is a night out with me, no guesses
what the second prize is :)

[1]http://docs.oracle.com/javase/1.4.2/docs/api/java/util/
Collections.html

Copied from that page:
"static Map singletonMap(Object key, Object value)
Returns an immutable map, mapping only the specified key to the
specified value."

I don't see the point of this. It takes a single key, with a single
value, and is immutable so you can't change it or add new keys. What's
the point? Why bother storing the key:value pair in a data structure,
then look up the same data structure to get the same value every time?

# Pseudo-code
d = singletonMap(key, calculate(key))
value = d[key] # there's only one key this could be
process(value)

Why not just store the value, instead of key, value and mapping?
value = calculate(key)

Google is your friend. Searching for "java singletonMap" gives this as

the second hit:



http://stackoverflow.com/questions/7125536/when-would-i-use-java-collections-singletonmap-method



The answers seem to be that it's for all those cases in Java where you have a

method that takes a map as an argument and you want to pass in a map witha single

kep/value pair. In that case it lets you replace 3 lines of Java with 1.



e.g. from the comments:

"If you have a simple select statement like "select foo from bar where id= :barId"

then you would need a parameter map with a single key-value pair, barId=123.

That's a great place to use singletonMap()"



Of course in Python you just use a dict literal in that case so it's pointless.

Cheers to those who are programmers that really love authoring in the highlevel one with tools to translate into other computer languages,
and also collecting the upgrade fees from clients.
 
M

Mark Lawrence

Steven D'Aprano said:
Purely for fun I've been porting some code to Python and came across
the singletonMap[1]. I'm aware that there are loads of recipes on
the web for both singletons e.g.[2] and immutable dictionaries
e.g.[3]. I was wondering how to combine any of the recipes to
produce the best implementation, where to me best means cleanest and
hence most maintainable. I then managed to muddy the waters for
myself by recalling the Alex Martelli Borg pattern[4]. Possibly or
even probably the latter is irrelevant, but I'm still curious to know
how you'd code this beast.

First prize for the best solution is a night out with me, no guesses
what the second prize is :)

[1]http://docs.oracle.com/javase/1.4.2/docs/api/java/util/
Collections.html

Copied from that page:

"static Map singletonMap(Object key, Object value)
Returns an immutable map, mapping only the specified key to the
specified value."

I don't see the point of this. It takes a single key, with a single
value, and is immutable so you can't change it or add new keys. What's
the point? Why bother storing the key:value pair in a data structure,
then look up the same data structure to get the same value every time?

# Pseudo-code
d = singletonMap(key, calculate(key))
# later:
value = d[key] # there's only one key this could be
process(value)


Why not just store the value, instead of key, value and mapping?

value = calculate(key)
# later
process(value)
Google is your friend. Searching for "java singletonMap" gives this as
the second hit:

http://stackoverflow.com/questions/7125536/when-would-i-use-java-collections-singletonmap-method

The answers seem to be that it's for all those cases in Java where you have a
method that takes a map as an argument and you want to pass in a map with a single
kep/value pair. In that case it lets you replace 3 lines of Java with 1.

e.g. from the comments:
"If you have a simple select statement like "select foo from bar where id = :barId"
then you would need a parameter map with a single key-value pair, barId=123.
That's a great place to use singletonMap()"

Of course in Python you just use a dict literal in that case so it's pointless.

Thank goodness for that, I'd assumed that I'd missed something blatantly
obvious. There are two chances of something like this getting into the
standard library, zero or none. I think in a way that's a great pity as
I'm sure that the Python devs would enjoy supporting the little feller
with code such as this http://tinyurl.com/9v7d7ld :)
 
D

Dennis Lee Bieber

Thank goodness for that, I'd assumed that I'd missed something blatantly
obvious. There are two chances of something like this getting into the
standard library, zero or none. I think in a way that's a great pity as
I'm sure that the Python devs would enjoy supporting the little feller
with code such as this http://tinyurl.com/9v7d7ld :)

Oh, the chance /might/ be a bit higher... On par with winning the
jackpot in one of those multi-state lotteries (because you'd have to
donate the entire jackpot to Python.org to persuade them to add a "do
nothing" package <G>)
 
D

Dwight Hutto

Oh, the chance /might/ be a bit higher... On par with winning the
jackpot in one of those multi-state lotteries (because you'd have to
donate the entire jackpot to Python.org to persuade them to add a "do
nothing" package <G>)

It's called
import time
time.sleep(x)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,567
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top