Generators are faster than list comprehension
import timeit
def test_plainlist(plain_list):
for i in plain_list():
pass
def test_listcompr(listcompr):
for i in listcompr():
pass
def test_generator(generator):
for i in generator():
pass
def test_generator_yield(generator_yield):
for i in generator_yield():
pass
print('plain_list: ', end='')
%timeit test_plainlist(plainlist)
print('\nlistcompr: ', end='')
%timeit test_listcompr(listcompr)
print('\ngenerator: ', end='')
%timeit test_generator(generator)
print('\ngenerator_yield: ', end='')
%timeit test_generator_yield(generator_yield)
Public vs. private class methods and name mangling
def public_method(self):
print('Hello public world!')
def __private_method(self):
print('Hello private world!')
def call_private_method_in_class(self):
self.__private_method()
my_instance = my_class()
my_instance.public_method()
my_instance._my_class__private_method()
my_instance.call_private_method_in_class()
The consequences of modifying a list when looping through it
a = [1, 2, 3, 4, 5]
for i in a:
if not i % 2:
a.remove(i)
print(a)
b = [2, 4, 5, 6]
for i in b:
if not i % 2:
b.remove(i)
print(b)