Посты с тэгом simple


Понимаем UnboundLocalError

Опять же на programmingwats.tumblr.com наткнулся на небольшую особенность питона.

my_str_1 = "1: outside of func"
my_str_2 = "2: outside of func"
def func_1():
    my_str_1 = "1: inside the func"
    my_str_2 = "2: inside the func"
    def func_2():
        print(my_str_1)
        print(my_str_2)
        my_str_1 = "1: inside the class"
    func_2()

func_1()
prints:
Traceback (most recent call last):
  File “<stdin>”, line 1, in <module>
  File “<stdin>”, line 8, in func_1
  File “<stdin>”, line 5, in func_2
UnboundLocalError: local variable ‘my_str_1’ referenced before assignment



{} vs dict()


В питоне предусмотрена возможность создать словарь двумя способами - через фигурные скобки {} и через конструктор dict(). В чем разница и что лучше использовать в коде?



Код

a = dict(one=1, two=2, three=3)
b = {'one': 1, 'two': 2, 'three': 3}

Пример наглядно демонстрирует что при статическом определении атрибутов количество кода практически одинаковое (скобки больше всего лишь на 2 символа). 


Инициализация

Конструктор словаря предлагает расширенный функционал для инициализации словаря.

d = dict((str(v),v) for v in range(10))
dict(zip(['one', 'two', 'three'], [1, 2, 3]))


Скорость работы

Выполним в консоли следующие выражения

>>python -m timeit "{}"