# Returning an image#

Previously, we defined a function for flip that does not have any `return` statement. Now, let’s consider another form for our function that does have a `return` statement.

```def flip_left_right(img):
for y in range(len(img)):
for x in range(len(img[y])//2):
temp = img[y][x]
img[y][x] = img[y][len(img[y])-x-1]
img[y][len(img[y])-x-1] = temp
return img
```

In order to validate the code, let’s bring back the same example from Step 7 as our test.

```rgb_square =[[(255,0,0),(0,255,0), (0,0,255)],
[(255,0,0),(0,255,0), (0,0,255)],
[(255,0,0),(0,255,0), (0,0,255)]]
```

In order to use `rgb_square` as our test sample to the `flip_left_right` function, we run the following lines. Now that our function has a `return` statement, we can assign the returned vaule to a new variable `flipped`.

```flipped = flip_left_right(rgb_square)
```

Then, here is the output of `rgb_square` and `flipped`.

```>>> rgb_square
[[(0, 0, 255), (0, 255, 0), (255, 0, 0)],
[(0, 0, 255), (0, 255, 0), (255, 0, 0)],
[(0, 0, 255), (0, 255, 0), (255, 0, 0)]]
>>> flipped
[[(0, 0, 255), (0, 255, 0), (255, 0, 0)],
[(0, 0, 255), (0, 255, 0), (255, 0, 0)],
[(0, 0, 255), (0, 255, 0), (255, 0, 0)]]
```

Thought experiment: how would you change `flip_left_right` so that it didn’t alter the input `img` at all?