В какой момент импорт становится правильным решением? - PullRequest
3 голосов
/ 01 марта 2010

В эти выходные я работал над проектом, и мне нужно было использовать биномиальное распределение для проверки вероятности события (вероятность того, что символы x из y будут буквенно-цифровыми, учитывая случайные байты). Моим первым решением было написать тест самостоятельно, поскольку он довольно прост.

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

def binomial_prob(n,k,p):
    bin_coeff = (factorial(n))/(factorial(k)*factorial(n-k))
    return = bin_coeff * pow(p,k) * pow((1 - p),(n-k))

И я использовал это. Тем не менее, SciPy включает метод binom_test, который делает именно это. Но для распространения это, вероятно, значительно увеличивает размер (потребуется SciPy и NumPy), и это для относительно простого теста. Полагаю, вспомогательный вопрос - насколько интеллектуален py2exe. Просто импортирует используемые мной модули из SciPy и NumPy или целые библиотеки. Я ожидаю только те модули, на которые я ссылаюсь, но я предполагаю, что следующий вопрос о том, от скольких модулей зависит SciPy.stats. Но я отвлекся ... Итак, мой вопрос заключается в следующем: когда я должен использовать уже написанный код за счет включения гораздо большего, чем мне нужно, и когда я должен просто написать свою собственную реализацию?

(я отметил это как python, но я полагаю, это может быть более общий вопрос)

Ответы [ 2 ]

5 голосов
/ 01 марта 2010

"когда я должен использовать код, уже написанный по цене, включающей гораздо больше, чем мне нужно "

Всегда.

Когда мне просто написать свою собственную реализацию?

Никогда.

Вопрос "в том числе гораздо больше, чем мне нужно", как правило, довольно глупый. Какое тебе дело, сколько «включено»?

Единственный раз, когда это может иметь значение, это когда вы пишете встроенное программное обеспечение и сильно ограничены в памяти.

Для всего другого программирования - Все другого программирования - не думайте дважды. Включайте заранее написанный код рано и часто. Пиши меньше. Решайте проблемы быстрее. Операционная система удалит неиспользуемые страницы из памяти. Вы можете спокойно их игнорировать.

Программирование - это решение проблем, а не создание кода. Чем меньше кода, тем лучше. Нет лучшего кода.

0 голосов
/ 02 марта 2010

Ответ зависит от того, кто будет использовать ваше приложение и насколько широко оно будет распространяться. Люди из Unix / Linux обычно предпочитают использовать существующие библиотеки, потому что они используются для каждой машины, являющейся машиной разработки, которая может перестраивать свое собственное программное обеспечение из исходного кода. Отчасти это связано с необходимостью, поскольку библиотеки нативного кода обычно должны компилироваться и связываться с локальной средой. Но для Windows это совершенно иное предложение, поскольку большинство пользователей не могут, не будут и даже не должны этого делать, поэтому вам следует подумать о том, как использование этих сторонних библиотек повлияет на ваши планы распространения - с точки зрения лицензия, с точки зрения размера загрузки, удобства использования и т. д.

Вы говорите о py2exe, который предлагает мне сделать однофайловый исполняемый файл для распространения среди пользователей Windows. Это означает, что вашей главной заботой будет совместимость (поскольку библиотеки, содержащие нативный код, могут работать только на одном типе платформы - хотя код Win32 должен подойти) и размер, так как py2exe не будет ничего хитрого в отношении зависимостей; ожидайте, что все это будет включено в ваш исполняемый файл. Лучший подход - это упаковать вещи и посмотреть, что получится. Это простой и неразрушающий шаг, поэтому вам следует попробовать его как можно скорее.

Вам также необходимо учитывать лицензии любых библиотек, которые вы распространяете. Опять же, толпа «повторного использования всего» иногда забывает об этом, потому что они часто работают над программным обеспечением, которое им не нужно распространять, и поэтому это не проблема. Для вас это может быть, особенно если у вас есть код, принадлежащий вашему работодателю или учреждению, хотя важно понимать, что когда вы распространяете приложения Python, вы, по сути, распространяете исходный код, чтобы кто-нибудь мог его посмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...