Thank you!
Wait, though.
How do I do this?
def differentnoofvars(*args,**kwargs): ## By the way, is it **kwargs or **kwds?
Call it what you like, it's an ordinary function parameter. kwds is commonly used but you can use kwargs.
print kwargs another(kwargs)
Should be another(**kwargs). If you call another(kwargs) then kwargs will be an ordinary parameter of another and another would be defined as
def another(kwargs):
...
def another(**kwargs): for x,y in kwagrs.items(): print "%s = %s" % (x,y)
a = ['a=2','f=3','t=[1,2,3]'] ## A list of kwargs that I want to send
Should be a dict, the **kwds parameter is a dict mapping keywords to values a = {'a':2, 'f':3, 't':[1,2,3]}
There really are two different and complementary things going on here, at the point of call and at the point of function definition.
At the point of call, you can pass a dictionary instead of using explicit, named parameters. For example, given a function test() defined like this:
>>> def test(a, b):
... print a, b
you can call it with ordinary named arguments: >>> test(a='foo', b='bar') foo bar
Or you can pass it a dictionary with the named arguments, using extended calling syntax: >>> d= {'a':'foo', 'b':'bar'} >>> test(**d) foo bar
Inside the function, if you have a **kwds parameter, it will receive a dict containing any keyword arguments not explicitly declared. This allows you to pass keyword parameters that you don't anticipate when the function is defined. For example,
>>> def test2(a, **kwds): ... print a ... for k,v in kwds.items(): ... print k,v
>>> test2(1) # No keywords 1 >>> test2(a=1) # a is a declared parameter so kwds is empty 1 >>> test2(1, b=2, c=3) # b and c are passed in kwds 1 c 3 b 2
Kent
individually to differentnoofvars differentnoofvars(a)
Hey, could you give an example? Thanks, Jacob
apply() is deprecated; it has been replaced by 'extended
call syntax'. Instead of
apply(fn, args, kwds) you can now write fn(*args, **kwds)
Kent
Here is a quick example I came up with:
def spam(*args, **kwargs):
... print "Here are the args you supplied:" ... for item in args: ... print item ... print ... print "Here are the kwargs you supplied:" ... for key,value in kwargs.items(): ... print key, '=', value ...
spam(1,'a','eggs',s=0, p=1, a=2, m=3)
Here are the args you supplied: 1 a eggs
Here are the kwargs you supplied: a = 2 p = 1 s = 0 m = 3
In the case of the spam() function, 1, 'a', and 'eggs' are all put into the sequence args (not sure if it is a list or tuple). The key/value pairs are bundled into the dictionary kwargs. The arguments have to be given in the right order though:
spam(t=1, b=1, 'this', 'will', 'fail')
Traceback (SyntaxError: non-keyword arg after keyword arg
HTH!
Christian http://www.dowski.com
_______________________________________________ Tutor maillist - [EMAIL PROTECTED] http://mail.python.org/mailman/listinfo/tutor
_______________________________________________ Tutor maillist - [EMAIL PROTECTED] http://mail.python.org/mailman/listinfo/tutor