как напечатать x = y ^ x, y = x без другой переменной
Этого недостаточно: объект, возвращенный __iter__, должен реализовать протокол итерации (т. е. метод next). См. Соответствующий раздел в документации .
В Python хорошей практикой является «попытаться увидеть» вместо «проверки».