<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def single_column(num_lev=30, water_depth=1., lev=None, **kwargs):
 """Creates domains for a single column of atmosphere overlying a slab of water. Can also pass a pressure array or pressure level axis object specified in ``lev``. If argument ``lev`` is not ``None`` then function tries to build a level axis and ``num_lev`` is ignored. **Function-call argument** \n :param int num_lev: number of pressure levels (evenly spaced from surface to TOA) [default: 30] :param float water_depth: depth of the ocean slab [default: 1.] :param lev: specification for height axis (optional) :type lev: :class:`~climlab.domain.axis.Axis` or pressure array :raises: :exc:`ValueError` if `lev` is given but neither Axis nor pressure array. :returns: a list of 2 Domain objects (slab ocean, atmosphere) :rtype: :py:class:`list` of :class:`SlabOcean`, :class:`SlabAtmosphere` :Example: :: climlab Domain object with domain_type=ocean and shape=(1,) climlab Domain object with domain_type=atm and shape=(2,) """

    if lev is None:
        levax = Axis(axis_type='lev', num_points=num_lev)
    elif isinstance(lev, Axis):
        levax = lev
    else:
        try:
            levax = Axis(axis_type='lev', points=lev)
        except:
            raise ValueError('lev must be Axis object or pressure array')
    depthax = Axis(axis_type='depth', bounds=[water_depth, 0.])
    slab = SlabOcean(axes=depthax, **kwargs)
    atm = Atmosphere(axes=levax, **kwargs)
    return slab, atm