default variable in python $_

R

rh0dium

Hi all,

So I have this simple little routine.. say like this..


def foo()
return {"a":"b", "b":"c"}

if foo():
print "Have foo"


Now I want the dictionary item a (ie. b)

How can I do it the above way or do I still have to go like this..

def foo()
return {"a":"b", "b":"c"}

z = foo()
if z:
print "Have foo"
print z['a']

This is where $_ in perl is awesome - There must be a default variable
in python right?
 
G

Georg Brandl

rh0dium said:
Hi all,

So I have this simple little routine.. say like this..


def foo()
return {"a":"b", "b":"c"}

if foo():
print "Have foo"


Now I want the dictionary item a (ie. b)

How can I do it the above way or do I still have to go like this..

def foo()
return {"a":"b", "b":"c"}

z = foo()
if z:
print "Have foo"
print z['a']

This is where $_ in perl is awesome - There must be a default variable
in python right?

Why should there? When you're learning a new language, the first thing you
should do is to empty your mind and stop expecting concepts known from other
languages. Instead, try to grasp what the essence of the new language is.

In the case of Python, one credo is "explicit is better than implicit".
IMO, this precludes, among other things, the notion of a "default variable".

Where is the problem with your second snippet?

Georg
 
B

bearophileHUGS

rh0dium:
This is where $_ in perl is awesome - There must be a default variable
in python right?

A default variable may add bugs to your code, and newbies of the
language may see it coming from air, so Python avoids such things. The
only Python "default variable" I know of is the _ that when used in the
Python shell, it (seem to) stores the last not-None result (inside
scripts it is a normal name sometimes used to 'ignore' some values):
Traceback (most recent call last):
...
NameError: name '_' is not definedTraceback (most recent call last):
...
NameError: name '_' is not defined2

Bye,
bearophile
 
M

MaR

rh0dium said:
Hi all,

So I have this simple little routine.. say like this..


def foo()
return {"a":"b", "b":"c"}

if foo():
print "Have foo"


Now I want the dictionary item a (ie. b)

How can I do it the above way or do I still have to go like this..

def foo()
return {"a":"b", "b":"c"}

z = foo()
if z:
print "Have foo"
print z['a']

This is where $_ in perl is awesome - There must be a default variable
in python right?

As said in earlier response, such a default variable is *dangerous* at
best!
Not knowing much about Perl and guessing that the $_ is a global
storage space, my immediate thought is; What happens if you have
multiple threads?

The example is too simplified to give any clues as to what you are
needing the feature for.
Guessing that you want to generate some dict() and use the result once
and then discard, write:

foo_default = 1
def foo(): return(generate_some_dict())

you can further write

foo().get('a', foo_default)

giving compact code and ensuring that you get a well defined result
regardless what dictionary keys there are.
 
R

rh0dium

Hi Maria,

This is exactly what I was looking for. I (as others have asked me to)
cleared my head of the other languages, but was mearly giving perl as
an example indicating the compactness I was after.

Thanks Maria!!
rh0dium said:
Hi all,

So I have this simple little routine.. say like this..


def foo()
return {"a":"b", "b":"c"}

if foo():
print "Have foo"


Now I want the dictionary item a (ie. b)

How can I do it the above way or do I still have to go like this..

def foo()
return {"a":"b", "b":"c"}

z = foo()
if z:
print "Have foo"
print z['a']

This is where $_ in perl is awesome - There must be a default variable
in python right?

As said in earlier response, such a default variable is *dangerous* at
best!
Not knowing much about Perl and guessing that the $_ is a global
storage space, my immediate thought is; What happens if you have
multiple threads?

The example is too simplified to give any clues as to what you are
needing the feature for.
Guessing that you want to generate some dict() and use the result once
and then discard, write:

foo_default = 1
def foo(): return(generate_some_dict())

you can further write

foo().get('a', foo_default)

giving compact code and ensuring that you get a well defined result
regardless what dictionary keys there are.
 

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

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top