Return a range of values from the sorted set name with scores
            between @min and @max.

            If @start and @num are specified, then return a slice
            of the range.

            @min: #int minimum score, or #str '-inf'
            @max: #int minimum score, or #str '+inf'
            @start: #int starting range position
            @num: #int number of members to fetch
            @withscores: #bool indicates to return the scores along with the
                members, as a list of |(member, score)| pairs
            @reverse: #bool indicating whether to sort the results descendingly

            -> yields members or |(member, score)| #tuple pairs

def iterbyscore(self, min='-inf', max='+inf', start=None, num=None,
                    withscores=False, reverse=None):
        """ Return a range of values from the sorted set name with scores
            between @min and @max.

            If @start and @num are specified, then return a slice
            of the range.

            @min: #int minimum score, or #str '-inf'
            @max: #int minimum score, or #str '+inf'
            @start: #int starting range position
            @num: #int number of members to fetch
            @withscores: #bool indicates to return the scores along with the
                members, as a list of |(member, score)| pairs
            @reverse: #bool indicating whether to sort the results descendingly

            -> yields members or |(member, score)| #tuple pairs
        """
        reverse = reverse if reverse is not None else self.reversed
        zfunc = self._client.zrangebyscore if not reverse \
            else self._client.zrevrangebyscore
        _loads = self._loads
        for member in zfunc(
           self.key_prefix, min=min, max=max, start=start, num=num,
           withscores=withscores, score_cast_func=self.cast):
            if withscores:
                yield (_loads(member[0]), self.cast(member[1]))
            else:
                yield _loads(member)