Explicit variable declaration

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • =?UTF-8?Q?Filip_Gruszczy=C5=84ski?=

    Explicit variable declaration

    Hello everyone!

    It is my first message on this list, therefore I would like to say
    hello to everyone. I am fourth year student of CS on the Univeristy of
    Warsaw and recently I have become very interested in dynamically typed
    languages, especially Python.

    I would like to ask, whether there is any way of explicitly declaring
    variables used in a function? While I am pretty sure, that there is no
    such way in the language itself, I would like to know, whether there
    are any third-party tools to do that. This would be very useful for me
    during development, so I am looking for such a tool.

    --
    Filip Gruszczyński
  • Dan Bishop

    #2
    Re: Explicit variable declaration

    On Apr 22, 7:39 pm, "Filip Gruszczyñski" <grusz...@gmail .comwrote:
    Hello everyone!
    >
    It is my first message on this list, therefore I would like to say
    hello to everyone. I am fourth year student of CS on the Univeristy of
    Warsaw and recently I have become very interested in dynamically typed
    languages, especially Python.
    >
    I would like to ask, whether there is any way of explicitly declaring
    variables used in a function? While I am pretty sure, that there is no
    such way in the language itself, I would like to know, whether there
    are any third-party tools to do that. This would be very useful for me
    during development, so I am looking for such a tool.
    def a_function(args ):
    # Local variables: item, item2
    ...

    ;-)

    Comment

    • Benjamin

      #3
      Re: Explicit variable declaration

      On Apr 22, 7:39 pm, "Filip Gruszczyñski" <grusz...@gmail .comwrote:
      Hello everyone!
      >
      It is my first message on this list, therefore I would like to say
      hello to everyone. I am fourth year student of CS on the Univeristy of
      Warsaw and recently I have become very interested in dynamically typed
      languages, especially Python.
      >
      I would like to ask, whether there is any way of explicitly declaring
      variables used in a function? While I am pretty sure, that there is no
      such way in the language itself, I would like to know, whether there
      are any third-party tools to do that. This would be very useful for me
      during development, so I am looking for such a tool.
      You mean the type? Not in 2.x, but in 3.x, there are function
      annotations:

      def a_function(arg1 : int, arg2: str) -None: pass
      >
      --
      Filip Gruszczyñski

      Comment

      • Ben Finney

        #4
        Re: Explicit variable declaration

        "Filip Gruszczyński" <gruszczy@gmail .comwrites:
        I have become very interested in dynamically typed languages,
        especially Python.
        Good to know. Welcome to the group.
        I would like to ask, whether there is any way of explicitly
        declaring variables used in a function?
        Declaring what about them? If you mean declaring the type, remember
        that Python deliberately allows any name to be bound to any object;
        type declarations can't be enforced without losing a lot of the power
        of Python.

        --
        \ "Hanging one scoundrel, it appears, does not deter the next. |
        `\ Well, what of it? The first one is at least disposed of." -- |
        _o__) Henry L. Mencken |
        Ben Finney

        Comment

        • =?UTF-8?Q?Filip_Gruszczy=C5=84ski?=

          #5
          Re: Explicit variable declaration

          You mean the type? Not in 2.x, but in 3.x, there are function
          annotations:
          >
          def a_function(arg1 : int, arg2: str) -None: pass
          Nope, I don't like types ;-) 3.x seems pretty revolutionary, and this
          typing can be appreciated by some people.
          Declaring what about them? If you mean declaring the type, remember
          that Python deliberately allows any name to be bound to any object;
          type declarations can't be enforced without losing a lot of the power
          of Python.
          Just declaring, that they exist. Saying, that in certain function
          there would appear only specified variables. Like in smalltalk, if I
          remember correctly.

          --
          Filip Gruszczyński

          Comment

          • Steve Holden

            #6
            Re: Explicit variable declaration

            Filip Gruszczyński wrote:
            > You mean the type? Not in 2.x, but in 3.x, there are function
            > annotations:
            >>
            > def a_function(arg1 : int, arg2: str) -None: pass
            >
            Nope, I don't like types ;-) 3.x seems pretty revolutionary, and this
            typing can be appreciated by some people.
            >
            >Declaring what about them? If you mean declaring the type, remember
            >that Python deliberately allows any name to be bound to any object;
            >type declarations can't be enforced without losing a lot of the power
            >of Python.
            >
            Just declaring, that they exist. Saying, that in certain function
            there would appear only specified variables. Like in smalltalk, if I
            remember correctly.
            >
            Icon has (had?) the same feature: if the "local" statement appeared then
            the names listed in it could be assigned in the local namespace, and
            assignment to other names wasn't allowed.

            A lot of people assume that's what the __slots__ feature of the new
            object model is for, but it isn't: it's actually a memory conservation
            device for circumstances when millions of objects must be created in an
            application.

            regards
            Steve
            --
            Steve Holden +1 571 484 6266 +1 800 494 3119
            Holden Web LLC http://www.holdenweb.com/

            Comment

            • Duncan Booth

              #7
              Re: Explicit variable declaration

              Steve Holden <steve@holdenwe b.comwrote:
              Filip Gruszczy"ski wrote:
              >Just declaring, that they exist. Saying, that in certain function
              >there would appear only specified variables. Like in smalltalk, if I
              >remember correctly.
              >>
              Icon has (had?) the same feature: if the "local" statement appeared
              then
              the names listed in it could be assigned in the local namespace, and
              assignment to other names wasn't allowed.
              Python being what it is, it is easy enough to add support for declaring
              at the top of a function which local variables it uses. I expect that
              actually using such functionality will waste more time than it saves,
              but here's a simple enough implementation:

              def uses(names):
              def decorator(f):
              used = set(f.func_code .co_varnames)
              declared = set(names.split ())
              undeclared = used-declared
              unused = declared-used
              if undeclared:
              raise ValueError("%s: %s assigned but not declared"
              % (f.func_name, ','.join(undecl ared)))
              if unused:
              raise ValueError("%s: %s declared but never used"
              % (f.func_name, ','.join(unused )))
              return f
              return decorator

              Used something like this:
              >>@uses("x y")
              def f(x):
              y = x+1
              return z
              >>@uses("x y z")
              def f(x):
              y = x+1
              return z


              Traceback (most recent call last):
              File "<pyshell#3 6>", line 1, in <module>
              @uses("x y z")
              File "<pyshell#3 2>", line 10, in decorator
              raise ValueError("%s: %s declared but never used" % (f.func_name,
              ','.join(unused )))
              ValueError: f: z declared but never used
              >>@uses("x")
              def f(x):
              y = x+1
              return z


              Traceback (most recent call last):
              File "<pyshell#3 8>", line 1, in <module>
              @uses("x")
              File "<pyshell#3 2>", line 8, in decorator
              raise ValueError("%s: %s assigned but not declared" % (f.func_name,
              ','.join(undecl ared)))
              ValueError: f: y assigned but not declared
              >>>

              Comment

              • Lie

                #8
                Re: Explicit variable declaration

                On Apr 23, 4:52 pm, "Filip Gruszczyñski" <grusz...@gmail .comwrote:
                You mean the type? Not in 2.x, but in 3.x, there are function
                annotations:
                >
                def a_function(arg1 : int, arg2: str) -None: pass
                >
                Nope, I don't like types ;-) 3.x seems pretty revolutionary, and this
                typing can be appreciated by some people.
                >
                Declaring what about them? If you mean declaring the type, remember
                that Python deliberately allows any name to be bound to any object;
                type declarations can't be enforced without losing a lot of the power
                of Python.
                >
                Just declaring, that they exist. Saying, that in certain function
                there would appear only specified variables. Like in smalltalk, if I
                remember correctly.
                If you want to just declare that name exist, but doesn't want to
                declare the type, why don't you just do this:

                def somefunc():
                nonlocal = nonlocal
                local = 0 # or None or [] or an initial value
                #
                return nonlocal * local

                Comment

                • =?UTF-8?Q?Filip_Gruszczy=C5=84ski?=

                  #9
                  Re: Explicit variable declaration

                  If you want to just declare that name exist, but doesn't want to
                  declare the type, why don't you just do this:
                  >
                  def somefunc():
                  nonlocal = nonlocal
                  local = 0 # or None or [] or an initial value
                  #
                  return nonlocal * local
                  Err.. I don't quite get. How it may help me? Could you explain?

                  --
                  Filip Gruszczyński

                  Comment

                  • Terry Reedy

                    #10
                    Re: Explicit variable declaration


                    "Filip Gruszczynski" <gruszczy@gmail .comwrote in message
                    news:1be78d2208 04231829k2c040f at80f6fe8b96e1b 7cf@mail.gmail. com...
                    | If you want to just declare that name exist, but doesn't want to
                    | declare the type, why don't you just do this:

                    Names do not 'exist' in Python, nor do they have types. They are bound to
                    objects that have types. Learn to program Python as Python, not one of
                    those languages with a quite different model of names and values.

                    | def somefunc():
                    | nonlocal = nonlocal

                    Syntax error in 3.0. Error or nonsense in 2.x

                    | local = 0 # or None or [] or an initial value
                    | #
                    | return nonlocal * local
                    |
                    | Err.. I don't quite get. How it may help me? Could you explain?

                    Forget the above. The only 'declarations' in Python, 'global' and
                    'nonlocal' are for the specialized purpose of *binding* names that are not
                    in the local namespace of a function or nested function. They are only
                    needed because otherwise names that get bound are otherwise assumed to be
                    local. See the language ref section on function defs.

                    tjr



                    Comment

                    • Jason Stokes

                      #11
                      Re: Explicit variable declaration


                      "Filip Gruszczynski" <gruszczy@gmail .comwrote in message
                      news:mailman.89 .1209000606.128 34.python-list@python.org ...
                      > If you want to just declare that name exist, but doesn't want to
                      > declare the type, why don't you just do this:
                      >>
                      > def somefunc():
                      > nonlocal = nonlocal
                      > local = 0 # or None or [] or an initial value
                      > #
                      > return nonlocal * local
                      >
                      Err.. I don't quite get. How it may help me? Could you explain?
                      Hi Filip,

                      In Python the standard patten for "declaring" variables is just to assign to
                      them as they are needed. If you want the effect of a declaration as you
                      would do in C, you can just define the variable and initialize it to 0 or
                      None. (Or {} for a new dictionary, or [] for a new list.)

                      eg,

                      def collaterecs():
                      recordscount = 0
                      recordlist = []
                      ...
                      return recordlist



                      Comment

                      • =?UTF-8?Q?Filip_Gruszczy=C5=84ski?=

                        #12
                        Re: Explicit variable declaration

                        In Python the standard patten for "declaring" variables is just to assign to
                        them as they are needed. If you want the effect of a declaration as you
                        would do in C, you can just define the variable and initialize it to 0 or
                        None. (Or {} for a new dictionary, or [] for a new list.)
                        Yep, I get it and I absolutely love this about Python. What I don't
                        actually love is situation, where I misspell and instead of setting
                        one variable, other is created. This is why I would like to declare
                        variables first and say, that these are the only ones, that can be set
                        in certain function (the same with fields in a class).

                        I am finishing a small tool, that allows to create such declarations
                        in similar manner to Smalltalk declarations. I hope I can post a link
                        to it soon.

                        --
                        Filip Gruszczyński

                        Comment

                        Working...