I'm having trouble with the following code:
for x in range(13):
prod(random.SystemRandom().random() for x in range(8))
What exactly does the "for x in range(8)" do in the prod function? I've read the math documentation but I still don't get it. Can someone explain this function?
CodePudding user response:
This is nothing specific to math.prod()
. That's a generator expression that produces a sequence of random numbers. It produces 8 of them because of for x in range(8)
.
The argument to math.prod()
is an iterable, and a generator is one type of iterable. prod()
multiplies all the values in the iterable sequence.
CodePudding user response:
for x in range(8)
is just part of a generator expression, it has nothing to do with math.prod
. To answer your question, it creates a sequence of eight random numbers on the interval [0, 1]. You may see this by
import random
list(random.SystemRandom().random() for x in range(8))
[0.003455723936271693, 0.6805747786326888, 0.546261218098562, 0.601146820744067, 0.8435991971789742, 0.9648570965040333, 0.28307143225490927, 0.4388989719001757]
Using the variable name x
is bad practice here because it shadows the x
in for x in range(13)
. The established convention for an unused variable is to name it _
. A better implementation of this code is:
from math import prod
import random
for x in range(13):
prod(random.SystemRandom().random() for _ in range(8))
CodePudding user response:
Not sure if you asking about the syntax or step through.
The range function returns a sequence of numbers starting at 0 going up to to the input you specify.
As this is written it will take the product of 9 random numbers between 0 and 1.
prod(random.SystemRandom().random() for x in range(8))
Because you have it in a loop (for x in range(13)) it will do this 14 times.
for x in range(13):
prod(random.SystemRandom().random() for x in range(8))
If your question is about list comprehension you can read about it in the python docs