<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/tensorflow/blob/v2.21.0/tensorflow/python/data/ops/iterator_ops.py#L560-L657) |

Represents an iterator of a [`tf.data.Dataset`](https://www.tensorflow.org/api_docs/python/tf/data/Dataset).

[`tf.data.Iterator`](https://www.tensorflow.org/api_docs/python/tf/data/Iterator) is the primary mechanism for enumerating elements of a
[`tf.data.Dataset`](https://www.tensorflow.org/api_docs/python/tf/data/Dataset). It supports the Python Iterator protocol, which means
it can be iterated over using a for-loop:

    dataset = tf.data.Dataset.range(2)
    for element in dataset:
      print(element)
    tf.Tensor(0, shape=(), dtype=int64)
    tf.Tensor(1, shape=(), dtype=int64)

or by fetching individual elements explicitly via `get_next()`:

    dataset = tf.data.Dataset.range(2)
    iterator = iter(dataset)
    print(iterator.get_next())
    tf.Tensor(0, shape=(), dtype=int64)
    print(iterator.get_next())
    tf.Tensor(1, shape=(), dtype=int64)

In addition, non-raising iteration is supported via `get_next_as_optional()`,
which returns the next element (if available) wrapped in a
[`tf.experimental.Optional`](https://www.tensorflow.org/api_docs/python/tf/experimental/Optional).

    dataset = tf.data.Dataset.from_tensors(42)
    iterator = iter(dataset)
    optional = iterator.get_next_as_optional()
    print(optional.has_value())
    tf.Tensor(True, shape=(), dtype=bool)
    optional = iterator.get_next_as_optional()
    print(optional.has_value())
    tf.Tensor(False, shape=(), dtype=bool)

<br />

<br />

<br />

| ## Attributes ||
|---|---|
| `element_spec` | The type specification of an element of this iterator. <br /> dataset = tf.data.Dataset.from_tensors(42) iterator = iter(dataset) iterator.element_spec tf.TensorSpec(shape=(), dtype=tf.int32, name=None) For more information, read [this guide](https://www.tensorflow.org/guide/data#dataset_structure). |

<br />

## Methods

### `get_next`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.21.0/tensorflow/python/data/ops/iterator_ops.py#L619-L634)

    @abc.abstractmethod
    get_next()

Returns the next element.

    dataset = tf.data.Dataset.from_tensors(42)
    iterator = iter(dataset)
    print(iterator.get_next())
    tf.Tensor(42, shape=(), dtype=int32)

<br />

<br />

<br />

| Returns ||
|---|---|
| A (nested) structure of values matching [`tf.data.Iterator.element_spec`](https://www.tensorflow.org/api_docs/python/tf/data/Iterator#element_spec). ||

<br />

<br />

<br />

<br />

| Raises ||
|---|---|
| [`tf.errors.OutOfRangeError`](https://www.tensorflow.org/api_docs/python/tf/errors/OutOfRangeError): If the end of the iterator has been reached. ||

<br />

### `get_next_as_optional`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.21.0/tensorflow/python/data/ops/iterator_ops.py#L636-L657)

    @abc.abstractmethod
    get_next_as_optional()

Returns the next element wrapped in [`tf.experimental.Optional`](https://www.tensorflow.org/api_docs/python/tf/experimental/Optional).

If the iterator has reached the end of the sequence, the returned
[`tf.experimental.Optional`](https://www.tensorflow.org/api_docs/python/tf/experimental/Optional) will have no value.

    dataset = tf.data.Dataset.from_tensors(42)
    iterator = iter(dataset)
    optional = iterator.get_next_as_optional()
    print(optional.has_value())
    tf.Tensor(True, shape=(), dtype=bool)
    print(optional.get_value())
    tf.Tensor(42, shape=(), dtype=int32)
    optional = iterator.get_next_as_optional()
    print(optional.has_value())
    tf.Tensor(False, shape=(), dtype=bool)

<br />

<br />

<br />

| Returns ||
|---|---|
| A [`tf.experimental.Optional`](https://www.tensorflow.org/api_docs/python/tf/experimental/Optional) object representing the next element. ||

<br />

### `__iter__`

    __iter__()