code: async def zrange(self, name, start, end, desc=False, withscores=False,
                       score_cast_func=float):
          
          if desc:
              return await self.zrevrange(name, start, end, withscores,
                                          score_cast_func)
          pieces = ['ZRANGE', name, start, end]
          if withscores:
              pieces.append(b('WITHSCORES'))
          options = {
              'withscores': withscores,
              'score_cast_func': score_cast_func
          }
          return await self.execute_command(*pieces, **options)
docs: Return a range of values from sorted set ``name`` between
          ``start`` and ``end`` sorted in ascending order.
  
          ``start`` and ``end`` can be negative, indicating the end of the range.
  
          ``desc`` a boolean indicating whether to sort the results descendingly
  
          ``withscores`` indicates to return the scores along with the values.
          The return type is a list of (value, score) pairs
  
          ``score_cast_func`` a callable used to cast the score return value