Created
November 6, 2019 23:42
-
-
Save victorusachev/5e9c00e946174fe5403f2c4ca2d9b9d9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from timeit import Timer | |
| def concatenation(sequence): | |
| result = '' | |
| for char in sequence: | |
| result += char | |
| return result | |
| def joining(sequence): | |
| return ''.join(sequence) | |
| def create_timer(func, sequence): | |
| timer = Timer( | |
| f'{func.__name__}(sequence)', | |
| f'from __main__ import {func.__name__}', | |
| globals=dict(sequence=sequence) | |
| ) | |
| return timer | |
| def main(*numbers, as_tuple=False): | |
| row_format = '{:<25}' * (len(numbers) + 1) | |
| print(row_format.format('Method / Number', *numbers)) | |
| for func in (concatenation, joining): | |
| sequence = ('s' for _ in range(1000)) | |
| if as_tuple: | |
| sequence = tuple(sequence) | |
| timer = create_timer(func, sequence) | |
| results = {} | |
| for number in numbers: | |
| results[number] = timer.timeit(number=number) | |
| print(row_format.format(func.__name__, *results.values())) | |
| if __name__ == '__main__': | |
| numbers = 100, 1000, 10000 | |
| print('Sequence as tuple') | |
| main(*numbers, as_tuple=True) | |
| print('\nSequence as generator') | |
| main(*numbers, as_tuple=False) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment