I've seen some examples where we can transfer generator into list as below.
First example:
print [2 * n for n in range(5)]
# same as the list comprehension above
print list(2 * n for n in range(5))    
Second example:
def double(L):
    for x in L:
        yield x*2
# eggs will be a generator
eggs = double([1, 2, 3, 4, 5])
# the above is equivalent to ("generator comprehension"?)
eggs = (x*2 for x in [1, 2, 3, 4, 5])
# need to do this if you need a list
eggs = list(double([1, 2, 3, 4, 5]))
print eggs
# the above is equivalent to (list comprehension)
eggs = [x*2 for x in [1, 2, 3, 4, 5]]
print eggs
My question is, can all generators be transferred into list?(I failed at below example):
def get_primes(number):
    while True:
        if is_prime(number):
            number = yield number
        number += 1
def is_prime(number):
    if number > 1:
        if number == 2:
            return True
        if number % 2 == 0:
            return False
        for current in range(3, int(math.sqrt(number) + 1), 2):
            if number % current == 0:
                return False
        return True
    return False
generator = get_primes(5)
print list(generator)
Output:TypeError: unsupported operand type(s) for +=: 'NoneType' and 'int'
The problem is here:number = yield number for some reason. Some explanation on this are appreciated.
 
     
     
    