code: def with_columns(head, *tails) -> Expression:
      """
      Creates an expression that selects a range of columns. It can be used wherever an array of
      expression is accepted such as function calls, projections, or groupings.
  
      A range can either be index-based or name-based. Indices start at 1 and boundaries are
      inclusive.
  
      e.g. with_columns(range_("b", "c")) or with_columns(col("*"))
  
      .. seealso:: :func:`~pyflink.table.expressions.range_`,
                   :func:`~pyflink.table.expressions.without_columns`
      """
      gateway = get_gateway()
      tails = to_jarray(
          gateway.jvm.Object, [_get_java_expression(t) for t in tails]
      )
      return _binary_op("withColumns", head, tails)
  
imports: from typing import Union
  from pyflink import add_version_doc
  from pyflink.java_gateway import get_gateway
  from pyflink.table.expression import Expression, _get_java_expression, TimePointUnit, JsonOnNull
  from pyflink.table.types import _to_java_data_type, DataType
  from pyflink.table.udf import UserDefinedFunctionWrapper
  from pyflink.util.java_utils import to_jarray, load_java_class
label_desc: Use image node_id 50 for calling a global function with example usage: with_columns(head) and returns: _binary_op