def hello(input, *args):
s=input.replace('%0','{0}')
v=s.format(args)
return v
assert "hello stack"==hello("hello %0","stack")
I am getting ASSERTION ERROR and the output is : "hello ('stack',)" instead of "hello stack".....WHY???
def hello(input, *args):
s=input.replace('%0','{0}')
v=s.format(args)
return v
assert "hello stack"==hello("hello %0","stack")
I am getting ASSERTION ERROR and the output is : "hello ('stack',)" instead of "hello stack".....WHY???
In the code that generates the error, you have the following as your function header:
def hello(input, *args):
This will turn args
into a tuple of all positional arguments. The code you have pasted in the question does not generate the error:
>>> def hello(input, args):
... s = input.replace('%0', '{0}')
... v = s.format(args)
... return v
...
>>> hello('hello %0', 'stack')
'hello stack'
>>> def hello2(input, *args):
... s = input.replace('%0', '{0}')
... v = s.format(args)
... return v
...
>>> hello2('Hello %0', 'stack')
"Hello ('stack',)"
To make it work, you need to expand the tuple: v = s.format(*args)
.
I'm not sure what the actual purpose of this code is, because it will only take the first argument; no matter how many actual arguments you sent to the method:
>>> def hello3(input, *args):
... s = input.replace('%0', '{0}')
... v = s.format(*args)
... return v
...
>>> hello3('hello %0', 'stack', 'world')
'hello stack'
This is because the {0}
binds to the first argument .format()
.