Как увеличить число в лямбде в Python?Python

Программы на Python
Ответить
Anonymous
 Как увеличить число в лямбде в Python?

Сообщение Anonymous »

Можно ли увеличить числовой объект, например int, с помощью лямбда-функции?
Представьте себе функцию просмотра, например:
def _peek(cb, iter):
for i in iter:
cb(i)

Как я могу просмотреть и добавить эти значения к сумме, как показано в следующем простом примере:
numbers = (1, 2, 3)
s = 0

# Doesn't work, because __add__ doesn't add inline
_peek(s.__add__, numbers)

# Doesn't work, because s is outside of scope (syntax error)
_peek(lambda x: s += x, numbers)

# Does work, but requires an additional function
def _sum(var):
nonlocal s
s += var

_peek(_sum, numbers)

# Does work, but reduces numbers
sum = reduce(lambda x, y: x+y, numbers)

Это реальный пример:
@dataclass
class Vote:
count = 0
def add_count(self, count: int):
self.count += count

vote = Vote()

# Doesn't work work
_peek(lambda x: vote.count += x, map(lambda x: x['count'], data))

# Does work, but requires additional function
_peek(vote.add_count, map(lambda x: x['count'], data))

На Java я могу легко писать:
@Test
public void test_numbers() {
class Vote {
int count = 0;
}

var vote = new Vote();

var count = Stream.of(1,2,3).peek(i -> vote.count+=i).filter(i -> i > 1).count();
assert vote.count == 6;
assert count == 2;
}


Подробнее здесь: https://stackoverflow.com/questions/762 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»