You must create a function, `spread`, that takes a function and a list of arguments to be applied to that function. You must make this function return the result of calling the given function/lambda with the given arguments.

eg:
```python
spread(someFunction, [1, true, "Foo", "bar"] ) 
# is the same as...
someFunction(1, true, "Foo", "bar")
```

Difficulty: introductory

Starter code:

def spread(func, args):
	

Solutions:
def spread(func, args):
    return func(*args)

# takes a function or lambda and a list of arguments to be passed to that function or lambda
# returns the result of calling the function or lambda on those arguments
def spread(func, args):
    return func(*args)

spread=apply

def spread(func, args):
    if args != ():
        return func(*args)
    else:
        return func()

spread = lambda func, args: func(*args)

def spread(func, args):
  return eval('func'+ '('+','.join(str(a) for a in args)+')')

def spread(q, p):
    return q(*p)

def spread(func, args):
    # arg is a list, and the command *args unpacks the list into the amount of arguments it contains
    return func(*args)

def spread(func, *args):
    x, y, z = 0, 0, 0
    # based on the number of arguments unpack the tuple 'args'
    if len(args[0]) == 2:
        x, y = args[0][0], args[0][1]
        return func(x, y)
    elif len(args[0]) == 3:
        x, y, z = args[0][0], args[0][1], args[0][2]
        return func(x, y, z)

def spread(func, args):
    if len(args)==2:
        return func(args[0],args[1])
    elif len(args)==3:
        return func(args[0],args[1],args[2])