пятница, 18 апреля 2014 г.

ограничение lambda

Ограничение на использование лямбда-выражений

lambda x, y: assert x==y

К сожеления это не будет работать, т.к. в лямбде нельзя использовать встроенные выражения

Можно режить конкретную проблему


def assert_eq(x, y): 
    assert x == y

f = lambda x, y: assert_eq(x, y)

Но особого смысла в этом нет, т.к. мы лямбдой просто вызываем новую функцию assert_eq

Ссылки




вторник, 8 апреля 2014 г.

приватные атрибуты в python

Ну нет приватных членов в питоне, ну нет...
Не надо писать С++/Java подобный код:

class C(object):
    def __init__(self):
        self.__name = 'default'

    def set_name(self, name):

        self.__name = name

    def get_name(self):

        return self.__name

Пробуем
>>>С().__name

Traceback (most recent call last):
  ...
    C().__name

AttributeError: C instance has no attribute '__name'

Посмотрим на список атрибутов объекта

>>>С().__dict__
{'_C__name': 'default'}

Ну и в догонку меняем атрибут

>>>С()._C__name = 'new_name'

Двойное подчеркивание всего лишь соглашение, интерпретатор ничего не прячет,

он лишь переименовывает атрибут. То же самое касается и приватных методов, единственно получать новое название метода нужно через dir().

Да и, если хотите управлять доступом к атрибутам, смотрите в сторону свойств.



Ссылки

https://docs.python.org/2/library/stdtypes.html#object.__dict__
http://stackoverflow.com/questions/70528/why-are-pythons-private-methods-not-actually-private

очистка экрана консоли

Небольшой хак по очистке экрана экрана консоли. Будет полезен тем, кто любит кодить в консоли.

import os
os.system('cls')

вторник, 1 апреля 2014 г.

Чтение исходников

Почему возникает потребность читать исходники сторонних, стандартных библиотек?
1. В исходниках можно найти примеры инженерных решений
Можно подчеркнуть архитектурные решения, принципы взаимодействия компоненнтов и прочее и прочее.

2. Примеры кода
Если код писал профессионал, то можно утащить себе в копилку красивые решения. Обратная ситуация - говнокод - в копилочку как делать не надо

3. Исходники могут быть единственным источником документации
"...код должен быть самодокументированным...", "...комментарии - трата времени...". Если разработчик библиотеки был из этих, то в перед к чтению исходного кода.

4. Для поиска багов
Баги есть везде, даже в стандартных библиотеках. И возникают ситуации когда - программа ведет себя не так как описано в документации и ошибка явно не в собственном коде, придется опускаться на уровень ниже  и читать исходники библиотек.