>>15731
En estricto rigor no usa "my_fun" como 'contador' del for, sino que el resultado de my_fun. Dado esto, la única forma en que ese for funcione es que el retorno de my_fun sea un iterable. Dado que my_fun hace retornos con yield en vez de return (yield lo que hace es retornar una lista de cada elemento), entonces el código funcionaría.
Analizando el código, se puede ver que:
1.- my_fun toma como parámetro un entero n, y retorna una lista de n strings donde cada elemento es el carácter '+' repetido 2 elevado a i veces. Por ejemplo, ['++', '++++', '++++++++'].
2.- El código principal llama a esta función con parámetro 2 y luego imprime todo junto los elementos de la lista, por lo que este caso el resultado sería '++++++', sin salto de línea final.