OP 12 February, 2021 - 10:25 PM
(This post was last modified: 12 February, 2021 - 10:26 PM by clap.)
This is simply how to load in combos in a fast, efficient way. Let me elaborate what a generator is.
Think of it as a conveyor belt, what happens when you put your food on it? When the cashier needs something, they hold down the button (yielding) to allow one item to come down at a time.
Now, let's talk in Python terms. Yielding is a form of returning an object without destroying the state of the function. What this means is, we can yield from a file until there is nothing else to yield from.
How does this help up with loading combos? Well you see, I've seen a lot of people using List Comprehensions to load in combos. While not "terrible", this is a very inefficient and slow process that will not work
for larger files. Say for example, you want to strip a string, split it, and return the list. This is what most people would do
Scalability:
100k Lines = 0.3790s
1m Lines = 2.1860s
Note:
Numbers differ from computer to computer, they're not perfect however, gives a pretty close expectation
What do you know? It works! But, do you want something to just work, or work well? For larger projects (or files), you want both. This is where generators come into place.
Scalability:
100k Lines = 0.0s
1m Lines = 0.0s
Wow! That's a really big difference in numbers, why does this happen?
Let me explain:
When you use a list comprehension, it's like you're squishing a ball of paper into 1 ball, you keep squishing, mashing, and pounding until you get the desired ball. That's EXACTLY what a list comprehension does, it packs all the data into 1 list at 1 time.
What a generator comprehension does is squish the paper once very slightly every time you want something from the paper (generator / getting a combo). This takes no time! It just waits and waits, until it's needed for the paper to be mashed!
That's why, it's very fast and efficient.
That concludes my tutorial, leave a like if you learned anything,
Regards, iclapcheeks
Think of it as a conveyor belt, what happens when you put your food on it? When the cashier needs something, they hold down the button (yielding) to allow one item to come down at a time.
Now, let's talk in Python terms. Yielding is a form of returning an object without destroying the state of the function. What this means is, we can yield from a file until there is nothing else to yield from.
How does this help up with loading combos? Well you see, I've seen a lot of people using List Comprehensions to load in combos. While not "terrible", this is a very inefficient and slow process that will not work
for larger files. Say for example, you want to strip a string, split it, and return the list. This is what most people would do
Code:
combos = open('combos.txt', 'r', encoding='utf-8', errors='ignore').readlines()
combos [_.strip().split(':') for _ in combos]
Scalability:
100k Lines = 0.3790s
1m Lines = 2.1860s
Note:
Numbers differ from computer to computer, they're not perfect however, gives a pretty close expectation
What do you know? It works! But, do you want something to just work, or work well? For larger projects (or files), you want both. This is where generators come into place.
Code:
combos = open('combos.txt') # Read mode is not needed for either example, as it's defaulted to that.
combos = (combo.strip().split(':') for combo in combos)
Scalability:
100k Lines = 0.0s
1m Lines = 0.0s
Wow! That's a really big difference in numbers, why does this happen?
Let me explain:
When you use a list comprehension, it's like you're squishing a ball of paper into 1 ball, you keep squishing, mashing, and pounding until you get the desired ball. That's EXACTLY what a list comprehension does, it packs all the data into 1 list at 1 time.
What a generator comprehension does is squish the paper once very slightly every time you want something from the paper (generator / getting a combo). This takes no time! It just waits and waits, until it's needed for the paper to be mashed!
That's why, it's very fast and efficient.
That concludes my tutorial, leave a like if you learned anything,
Regards, iclapcheeks
Always confirm via PM before dealing with me.