Рубрики
Без рубрики

Добавление 42 в список

Этот пост был первоначально опубликован на LinkedIn. Компания Colorcode Ltd по-настоящему верит в включи … Теги с Python, Java, Array, KDB.

Этот пост был первоначально опубликован на Linkedin. .

Компания ColorCode Ltd действительно верит в включение и разнообразие и позволяет своим разработчикам решить, какой язык программирования они хотят использовать.

Джек является программистом C и был назначен в рекламную задачу передачи некоторых данных. Он быстро собирает сценарий Python, в котором он добавляет 42 на все элементы списка l .

>>> res = []
>>> for i in range(len(l)):
      res.append(l[i] + 42)

Его сосед на столе привлекает внимание Джека на для каждого Концепция, которая поддерживается родом Python. Джек упрощает свой скрипт и объединяет его в главную ветку Git Repo.

>>> res = []
>>> for e in l:
      res.append(e + 42)

Brina, промежуточный Python Programmer, Ptons The Commit и Visits Jack, чтобы показать свою любимую функцию Python, Понимание списка Отказ

>>> res = [e + 42 for e in l]

Затем Python Guuru, Xu, присоединяется к разговору. Он просит Джек, если переменная RES будет изменена позже. Если нет, то он рекомендует использовать кортеж и выражение генератора вместо списка. Кортежи быстрее создавать и требуют меньшего количества памяти, чем списки.

>>> res = tuple(e + 42 for e in l)

Менеджер по непрерывности бизнеса, Гарри, бросает вызов Группе об общности понимания списка на других языках программирования. Кто будет поддерживать код, если разработчики Python прыгают на новую шумиху. Другие разработчики переслушают разговор и присоединяются к обсуждению. У разработчиков Haskell, Erlang, Perl, Ruby и Scala все согласны с тем, что Джек должен использовать Функция более высокого порядка , что более широко распространяется, чем понимание списка. На самом деле, большинство других языков программирования также вызывают эту карту функции, поэтому целью кода будет очевидно для других разработчиков. Гарри доволен консенсусом.

>>> res = list(map(lambda e: e + 42, l))

Сюй SHIMES снова и спроси, если результат действительно должен быть список или может быть генератор. «Давайте избегаем ненужных преобразований», – говорит он. Джек не может действительно ответить на этот вопрос и принимает предложение Сюй, чтобы пройти код.

Java Developer János слушает обсуждение с грустью. Он знает, что Java 8 поощряет функциональное программирование, но у него есть только возможность попробовать его дома. В офисе он работает в системе с более чем миллионами кода, и бизнес не будет спонсировать миграцию на новую версию Java. Пять лет назад многие отходы были вызваны миграцией в Java 6, хотя они безопасно охраняли движение с большим количеством модульных тестов и использовали полную команду QA.

import java.util.List;
import java.util.ArrayList;

// Java 6:
List res = new ArrayList();

for (Integer e : l):
  res.add(e + 42);


// Java 8:
import java.util.stream.Collectors;

List res = l.stream().map(e -> e + 42).collect(Collectors.toList());

Другие разработчики чувствуют эмпатия и пытаются консоли János. Хотя у него был онеленер, он мог сэкономить только 7% печати.

Shraddha – разработчик Python, аватар которого является библиотекарем – напоминает другим, чтобы избежать восстановления колеса. Вместо того, чтобы создавать еще одну функцию лямбда, просто сделайте проекцию от оператора плюс. Библиотека functools вместе с библиотекой Операторы Поддержите это.

>>> from functools import partial
>>> from operator import add

>>> res = list(map(partial(add, 3), l))

Шрардда любит частичную функцию. Она признает, что она повлияла на Q Язык программирования в котором частичная функция ( проекция на первом садике) хорошо встроена в ядра языка.

q) 2 + 3           // infix notation
5
q) +[2; 3]         // prefix notation
5
q) addTwo: +[2]    // fix the first parameter
q) addTwo[3]
5

Еоргос, вентилятор объектно-ориентированного программирования, напоминает SCRAddha, что в Python все является объектом, и есть некоторые магические методы. Оператор плюс вызывает личный метод __add__ за кулисами.

>>> 1.2 + 3.4
4.6
>>> 1.2.__add__(3.4)
4.6

Парсер требует дополнительного пространства, чтобы сделать то же самое с целыми числами

>>> 2.__add__(3)
            ^
SyntaxError: invalid syntax
>>> 2 .__add__(3)
5

Yiorgos показывает, как добавить 42 на все элементы списка без использования функций Lambda или импортируя functools Отказ

res = list(map(42 .__add__, l))     // note the extra space after 42

Пять данных ученых, Артур, Сильвия, Фреда, Кейфер и Гёрги, эксперты в Q, Pandas (Python), R, Julia и Matlab соответственно, прибывают со встречи и подходят к группе. Они на самом деле не понимают, почему такая задача – это проблема для любого, так как достойный векторный язык программирования решает эту из коробки. Помимо ценностей, которые все они написали тот же код:

 l + 42

Silvia предлагает использовать Numpy в любом случае (для переменных l и res), потому что проще в использовании, быстрее и требует меньшего количества памяти. Она входит в долгое и тщательное обсуждение с Сюй о СБЕ о плюсах и минусах списка, массив Python, Numpy Array, кортеж, генераторы и т. Д. Артур слушает растерянный и на самом деле не понимает, почему есть так много вариантов.

В Q есть только один список, и каждый запрограммировал каждую задачу

q) res: l + 42

Он упоминает, что кто-то знал парня, который слышал о том, кто использовал петлю Do-White в Q … – Но это, вероятно, это просто городская легенда.

Фред угонает тему и признает, что он запутался, когда впервые попытался использовать Matlab и Julia. Использование символа + работала нормально при добавлении двух векторов элемент-мудрых, но выпускается ошибка для векторных мультипликаций через символ *. György объясняет, что дизайнеры языков векторных программиров должны определить, кто являются основными пользователями. * Символ * может либо относиться к Точечный продукт ( Умножение матрицы в общем случае) или к элементам умножения. Ученые данные чаще используют элемент-мудрые операции, поскольку векторы получают из столбцов таблиц данных. Многие другие инженеры предпочитают строгие матричные операции. Q, numpy и r нацелен на первый тип пользователей, Matlab и Julia нацеливаются на другую. Тем не менее, все пять языков программирования поддерживают обе операции.

# q/kdb+
q) v1 * v2                  # element-wise
q) v1 mmu flip enlist v2    # matrix multiplication
q) v1 wsum v2               # another form for vectors

# Python Numpy
>>> v1 * v2
>>> np.matmul(v1, v2)
>>> np.dot(v1, v2)
>>> np.inner(v1, v2)

# R
> v1 * v2
> v1 %*% v2

# Matlab
v1 .* v2
v1 * v2.'

# Julia
julia> v1 .* transpose(v2)
julia> v1 * v2

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

Джеймс больше беспокоит что-то еще: если для этой простой задачи девять разных решений, то сколько возможных решений существует для сложной проблемы?!? Количество возможных комбинаций экспоненциально увеличивается с увеличением сложности.

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

Отказ от ответственности. Это художественное произведение. Имена, персонажи, предприятия, события и инциденты являются либо продуктами воображения авторской или использованной в фиктивном порядке. Любое сходство на фактические лица или компании является чисто совпадающим.

Оригинал: “https://dev.to/bodonferenc/adding-42-to-a-list-8hp”