Pythonic loop logic for Tic-Tac-Toe game board
When you make "the same" function call repeatedly, you can create a question in the reader's mind whether or not it will return the same value every time (especially where the arguments are mutable objects, but even if not).

This is probably to be avoided where it's easy to do so. In your code the expectation is that the function will eventually change what value it returns to terminate the loop, and then won't change value across the if ... elif

Separately, there is a question of the performance of the code. Strictly speaking it is premature optimization to consider the performance of a function without measuring it to determine whether or not it is significant, but I think most programmers would avoid executing game_status more times than they have to.

On this occasion both concerns are dealt with much the same way -- assign the value to a variable and use the variable repeatedly. This minimizes the number of calls made for performance, and it indicates to the reader when you think you've changed something such that the result might have changed.

There is nothing inherently wrong with using the result of a function call as a condition:

if "foo".startswith("f"):
    print('as expected')


Out of interest - what is the condition in the "main game code" that will break out of the loop, avoiding the loop's else clause? Match abandoned?