Is there a clever way to pass arguments

Discussion in 'Python' started by bruceg113355@gmail.com, Aug 9, 2012.

  1. Guest

    Is there a way in Python to pass arguments without listing each argument?
    For example, my program does the following:

    testData (z[0], z[1], z[2], z[3], z[4], z[5], z[6], z[7])

    Is there a clever way to pass arguments in a single statement knowing that each argument is a sequential index from a list?
    I cannot change the function definition.

    Thanks,
    Bruce
     
    , Aug 9, 2012
    #1
    1. Advertising

  2. On 09/08/2012 01:41, wrote:
    > Is there a way in Python to pass arguments without listing each argument?
    > For example, my program does the following:
    >
    > testData (z[0], z[1], z[2], z[3], z[4], z[5], z[6], z[7])
    >
    > Is there a clever way to pass arguments in a single statement knowing that each argument is a sequential index from a list?
    > I cannot change the function definition.
    >
    > Thanks,
    > Bruce
    >


    testData(*z)

    assuming that there are exactly 8 entries in z

    see
    http://docs.python.org/dev/tutorial/controlflow.html#more-on-defining-functions

    ~Andrew
     
    Andrew Cooper, Aug 9, 2012
    #2
    1. Advertising

  3. Dave Angel Guest

    On 08/08/2012 08:41 PM, wrote:
    > Is there a way in Python to pass arguments without listing each argument?
    > For example, my program does the following:
    >
    > testData (z[0], z[1], z[2], z[3], z[4], z[5], z[6], z[7])
    >
    > Is there a clever way to pass arguments in a single statement knowing that each argument is a sequential index from a list?
    > I cannot change the function definition.
    >
    > Thanks,
    > Bruce

    If a function is expecting exactly 8 arguments, and z is a list of
    length 8, you can call the function like:

    testData(*z)

    if z is longer, then you'd need something like (untested)
    testData(*z[:8])

    The * basically turns a list into separate arguments, and these are then
    applied to the formal parameters.

    --

    DaveA
     
    Dave Angel, Aug 9, 2012
    #3
  4. Guest

    On Wednesday, August 8, 2012 9:07:04 PM UTC-4, Dave Angel wrote:
    > On 08/08/2012 08:41 PM, wrote:
    >
    > > Is there a way in Python to pass arguments without listing each argument?

    >
    > > For example, my program does the following:

    >
    > >

    >
    > > testData (z[0], z[1], z[2], z[3], z[4], z[5], z[6], z[7])

    >
    > >

    >
    > > Is there a clever way to pass arguments in a single statement knowing that each argument is a sequential index from a list?

    >
    > > I cannot change the function definition.

    >
    > >

    >
    > > Thanks,

    >
    > > Bruce

    >
    > If a function is expecting exactly 8 arguments, and z is a list of
    >
    > length 8, you can call the function like:
    >
    >
    >
    > testData(*z)
    >
    >
    >
    > if z is longer, then you'd need something like (untested)
    >
    > testData(*z[:8])
    >
    >
    >
    > The * basically turns a list into separate arguments, and these are then
    >
    > applied to the formal parameters.
    >
    >
    >
    > --
    >
    >
    >
    > DaveA









    Dave, your solution works!

    def testData (z0, z1, z2, z3, z4, z5, z6, z7):
    print (z0, z1, z2, z3, z4, z5, z6, z7)

    z = []
    z.append(0)
    z.append(1)
    z.append(2)
    z.append(3)
    z.append(4)
    z.append(5)
    z.append(6)
    z.append(7)

    testData(*z[:8])

    Thank you,
    Bruce
     
    , Aug 9, 2012
    #4
  5. Guest

    On Wednesday, August 8, 2012 9:07:04 PM UTC-4, Dave Angel wrote:
    > On 08/08/2012 08:41 PM, wrote:
    >
    > > Is there a way in Python to pass arguments without listing each argument?

    >
    > > For example, my program does the following:

    >
    > >

    >
    > > testData (z[0], z[1], z[2], z[3], z[4], z[5], z[6], z[7])

    >
    > >

    >
    > > Is there a clever way to pass arguments in a single statement knowing that each argument is a sequential index from a list?

    >
    > > I cannot change the function definition.

    >
    > >

    >
    > > Thanks,

    >
    > > Bruce

    >
    > If a function is expecting exactly 8 arguments, and z is a list of
    >
    > length 8, you can call the function like:
    >
    >
    >
    > testData(*z)
    >
    >
    >
    > if z is longer, then you'd need something like (untested)
    >
    > testData(*z[:8])
    >
    >
    >
    > The * basically turns a list into separate arguments, and these are then
    >
    > applied to the formal parameters.
    >
    >
    >
    > --
    >
    >
    >
    > DaveA









    Dave, your solution works!

    def testData (z0, z1, z2, z3, z4, z5, z6, z7):
    print (z0, z1, z2, z3, z4, z5, z6, z7)

    z = []
    z.append(0)
    z.append(1)
    z.append(2)
    z.append(3)
    z.append(4)
    z.append(5)
    z.append(6)
    z.append(7)

    testData(*z[:8])

    Thank you,
    Bruce
     
    , Aug 9, 2012
    #5
  6. On Wed, 08 Aug 2012 18:20:40 -0700, bruceg113355 wrote:

    > z = []
    > z.append(0)
    > z.append(1)
    > z.append(2)
    > z.append(3)
    > z.append(4)
    > z.append(5)
    > z.append(6)
    > z.append(7)


    That can be written as:

    z = [0, 1, 2, 3, 4, 5, 6, 7]

    Or better still:

    z = range(8) # In Python 3, use list(range(8)) instead.



    --
    Steven
     
    Steven D'Aprano, Aug 9, 2012
    #6
  7. wrote:
    > Is there a way in Python to pass arguments without listing each argument?
    > For example, my program does the following:
    >
    > testData (z[0], z[1], z[2], z[3], z[4], z[5], z[6], z[7])
    >
    > Is there a clever way to pass arguments in a single statement knowing that each argument is a sequential index from a list?
    > I cannot change the function definition.
    >
    > Thanks,
    > Bruce
    >

    testData(*z)

    or better (imo)

    testData(z) and make testData handle a list (8 parameters, that's a lot
    of parameters).

    JM
     
    Jean-Michel Pichavant, Aug 9, 2012
    #7
  8. On Thu, Aug 9, 2012 at 7:05 PM, Jean-Michel Pichavant
    <> wrote:
    > wrote:
    >>
    >> I cannot change the function definition.

    >
    > or better (imo)
    > testData(z) and make testData handle a list (8 parameters, that's a lot of
    > parameters).


    He can't change the function definition.

    ChrisA
     
    Chris Angelico, Aug 9, 2012
    #8
  9. Chris Angelico wrote:
    > On Thu, Aug 9, 2012 at 7:05 PM, Jean-Michel Pichavant
    > <> wrote:
    >
    >> wrote:
    >>
    >>> I cannot change the function definition.
    >>>

    >> or better (imo)
    >> testData(z) and make testData handle a list (8 parameters, that's a lot of
    >> parameters).
    >>

    >
    > He can't change the function definition.
    >
    > ChrisA
    >

    my bad

    JM
     
    Jean-Michel Pichavant, Aug 9, 2012
    #9
  10. GangGreene Guest

    Alister wrote:

    [putolin]

    > some people read these threads to learn general concepts & not to find
    > answers to a single explicit case.


    Some people (me) don't know the first thing about python and are in the
    learning/exploratory phase.
     
    GangGreene, Aug 9, 2012
    #10
  11. Terry Reedy Guest

    On 8/9/2012 5:50 AM, Jean-Michel Pichavant wrote:
    > Chris Angelico wrote:
    >> On Thu, Aug 9, 2012 at 7:05 PM, Jean-Michel Pichavant
    >> <> wrote:
    >>> wrote:
    >>>> I cannot change the function definition.
    >>> or better (imo)
    >>> testData(z) and make testData handle a list (8 parameters, that's a
    >>> lot of
    >>> parameters).

    >>
    >> He can't change the function definition.


    One can always wrap a function with an adaptor if the signature is too
    awful.

    --
    Terry Jan Reedy
     
    Terry Reedy, Aug 9, 2012
    #11
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    14
    Views:
    666
  2. A
    Replies:
    0
    Views:
    267
  3. Eric Lilja
    Replies:
    4
    Views:
    309
    Kai-Uwe Bux
    Jan 22, 2007
  4. Cyril.Liu
    Replies:
    3
    Views:
    452
    Clifford Heath
    Aug 20, 2010
  5. Replies:
    20
    Views:
    380
    Ethan Furman
    Nov 16, 2012
Loading...

Share This Page