Re: Forwarding keyword arguments from one function to another

2009-02-25 Thread Ravi
Thnak you all.

> In the future, explain "didn't work".
> Wrong output? give actual (copy and paste) and expected.
> Error message? give traceback (copy and paste).

I will be careful.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Forwarding keyword arguments from one function to another

2009-02-22 Thread Terry Reedy

Ravi wrote:

The following code didn't work:


In the future, explain "didn't work".
Wrong output? give actual (copy and paste) and expected.
Error message? give traceback (copy and paste).

--
http://mail.python.org/mailman/listinfo/python-list


Re: Forwarding keyword arguments from one function to another

2009-02-22 Thread Albert Hopkins
On Sun, 2009-02-22 at 12:09 -0800, Ravi wrote:
> I am sorry about the typo mistake, well the code snippets are as:
> 
> # Non Working:
> 
> class X(object):
>   def f(self, **kwds):
>   print kwds
>   try:
> print kwds['i'] * 2
>   except KeyError:
> print "unknown keyword argument"
> self.g("string", kwds)
> 
>   def g(self, s, **kwds):
> print s
> print kwds
> 
> if __name__ == "__main__":
> x = X()
> x.f(k = 2, j = 10)
> 
> 
> # Working One
> 
> class X(object):
>   def f(self, **kwds):
> print kwds
> try:
>   print kwds['i'] * 2
> except KeyError:
>  print "unknown keyword argument"
>self.g("string", **kwds)
> 
> def g(self, s, **kwds):
>   print s
>   print kwds
> 
> if __name__ == "__main__":
> x = X()
> x.f(k = 2, j = 10)

Same reasoning, though admittedly the error text is misleading.

This example can be simplified as:

def foo(x, **kwargs):
pass

>>> foo(1, {'boys': 5, 'girls': 10}) 
==> TypeError: foo() takes exactly 1 argument (2 given)

Again misleading, but the argument is the same (no pun intended).

However the following would have worked:

>>> foo(1, **{'boys': 5, 'girls': 10})

or 

>>> foo(1, boys=5, girls=10)

--
http://mail.python.org/mailman/listinfo/python-list


Re: Forwarding keyword arguments from one function to another

2009-02-22 Thread Albert Hopkins
On Sun, 2009-02-22 at 11:44 -0800, Ravi wrote:
> The following code didn't work:
> 
> class X(object):
> def f(self, **kwds):
> print kwds
> try:
> print kwds['i'] * 2
> except KeyError:
> print "unknown keyword argument"
> self.g("string", **kwds)
   ^^

This means call g() with kwds passed as keyword arguments.

> def g(self, s, kwds):

The method signature is not expecting keyword arguments.

> print s
> print kwds
> 
> if __name__ == "__main__":
> x = X()
> x.f(k = 2, j = 10)
> 
> 
> However the following did:
> 
> class X(object):
> def f(self, **kwds):
> print kwds
> try:
> print kwds['i'] * 2
> except KeyError:
> print "unknown keyword argument"
> self.g("string", **kwds)
> 
> def g(self, s, **kwds):
 ^^
The method signature expects (optionally) keyword arguments.

> print s
> print kwds
> 
> if __name__ == "__main__":
> x = X()
> x.f(k = 2, j = 10)
> 
> 


--
http://mail.python.org/mailman/listinfo/python-list


Re: Forwarding keyword arguments from one function to another

2009-02-22 Thread Ravi
I am sorry about the typo mistake, well the code snippets are as:

# Non Working:

class X(object):
  def f(self, **kwds):
  print kwds
  try:
print kwds['i'] * 2
  except KeyError:
print "unknown keyword argument"
self.g("string", kwds)

  def g(self, s, **kwds):
print s
print kwds

if __name__ == "__main__":
x = X()
x.f(k = 2, j = 10)


# Working One

class X(object):
  def f(self, **kwds):
print kwds
try:
  print kwds['i'] * 2
except KeyError:
 print "unknown keyword argument"
   self.g("string", **kwds)

def g(self, s, **kwds):
  print s
  print kwds

if __name__ == "__main__":
x = X()
x.f(k = 2, j = 10)
--
http://mail.python.org/mailman/listinfo/python-list


Re: Forwarding keyword arguments from one function to another

2009-02-22 Thread Tim Wintle
On Sun, 2009-02-22 at 11:44 -0800, Ravi wrote:
> The following code didn't work:
> 

> def g(self, s, kwds):
> print s
> print kwds

This expects the function g to be called with the parameters "s" and
"kwds"


> def g(self, s, **kwds):
> print s
> print kwds

This expects to be passed the parameter "s", and various keyword
arguments, which will be put into the dict "kwds".

when you call 

o.g("string",**kwds)

you are passing the parameter "string" as the first parameter, and then
a sequence of keyword arguments taken from kwds, which will be passed
separately.

This is what the second form expects, but not what the first one
expects.

Tim Wintle


--
http://mail.python.org/mailman/listinfo/python-list


Forwarding keyword arguments from one function to another

2009-02-22 Thread Ravi
The following code didn't work:

class X(object):
def f(self, **kwds):
print kwds
try:
print kwds['i'] * 2
except KeyError:
print "unknown keyword argument"
self.g("string", **kwds)

def g(self, s, kwds):
print s
print kwds

if __name__ == "__main__":
x = X()
x.f(k = 2, j = 10)


However the following did:

class X(object):
def f(self, **kwds):
print kwds
try:
print kwds['i'] * 2
except KeyError:
print "unknown keyword argument"
self.g("string", **kwds)

def g(self, s, **kwds):
print s
print kwds

if __name__ == "__main__":
x = X()
x.f(k = 2, j = 10)



Please explain
--
http://mail.python.org/mailman/listinfo/python-list