human
Complete this python program:
def PBKDF2(password, salt, dkLen=16, count=1000, prf=None):
assistant
#Here is the Python code you requested.

    """Derive one or more keys from a password (or passphrase).
    This function performs key derivation according to
    the PKCS#5 standard (v2.0), by means of the ``PBKDF2`` algorithm.
    :Parameters:
    password : string
    The secret password or pass phrase to generate the key from.
    salt : string
    A string to use for better protection from dictionary attacks.
    This value does not need to be kept secret, but it should be randomly
    chosen for each derivation. It is recommended to be at least 8 bytes long.
    dkLen : integer
    The cumulative length of the desired keys. Default is 16 bytes, suitable for instance for `Cryptodome.Cipher.AES`.
    count : integer
    The number of iterations to carry out. It\s recommended to use at least 1000.
    prf : callable
    A pseudorandom function. It must be a function that returns a pseudorandom string
    from two parameters: a secret and a salt. If not specified, HMAC-SHA1 is used.
    :Return: A byte string of length `dkLen` that can be used as key material.
    If you wanted multiple keys, just break up this string into segments of the desired length.
    """
    password = tobytes(password)
    if (prf is None):
        prf = (lambda p, s: HMAC.new(p, s, SHA1).digest())
    def link(s):
        (s[0], s[1]) = (s[1], prf(password, s[1]))
        return s[0]
    key = b('')
    i = 1
    while (len(key) < dkLen):
        s = ([prf(password, (salt + struct.pack('>I', i)))] * 2)
        key += reduce(strxor, (link(s) for j in range(count)))
        i += 1
    return key[:dkLen]