Skip to content
Advertisement

Receive print content of another class at execution time not after the end of the function

What I have tried:

import import_ipynb
import time

class A:
    def func1(self):
        for i in range(0, 5):
            print(i)
            time.sleep(1)

class B:
    print('Time is:', A().func1())

In class B I want to get print content in class A and add 'Time is:' to the beginning and print it in console. One solution is to return i as a list at the end of function, but I want i as instantaneous, not when the function is fully executed. The code I wrote does not do this correctly.
The output I want is:

Time is: 0
Time is: 1
Time is: 2
Time is: 3
Time is: 4

Advertisement

Answer

Assuming that you don’t want to just change print(i) to print(f"Time is: {i}"), you can yield i from the function, then print at the callsite:

import time

def func1():
    for i in range(0, 5):
        yield i
        time.sleep(1)

for i in func1():
    print(f"Time is: {i}")

I got rid of the classes since neither was directly relevant to the problem.

yield turns func1 into a generator function. Calling func1 returns a generator that produces values as needed.

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement