default variable in python $_

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • rh0dium

    default variable in python $_

    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?

  • Georg Brandl

    #2
    Re: default variable in python $_

    rh0dium wrote:
    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

    Comment

    • bearophileHUGS@lycos.com

      #3
      Re: default variable in python $_

      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):
      >>a = 1
      >>_
      Traceback (most recent call last):
      ...
      NameError: name '_' is not defined
      >>print 2
      2
      >>_
      Traceback (most recent call last):
      ...
      NameError: name '_' is not defined
      >>5 / 3
      1
      >>_
      1
      >>None
      >>_
      1
      >>2
      2
      >>_
      2

      Bye,
      bearophile

      Comment

      • MaR

        #4
        Re: default variable in python $_


        rh0dium wrote:
        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.

        Comment

        • rh0dium

          #5
          Re: default variable in python $_

          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!!

          MaR wrote:
          rh0dium wrote:
          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.

          Comment

          Working...