Re: Forwarding keyword arguments from one function to another
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
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
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
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
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
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
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