Как сделать так, чтобы Python Lambda возвращал запятую последний оператор - PullRequest
0 голосов
/ 13 июня 2019

Я просто хочу использовать Javascript оператор запятой в лямбда-функции Python, и теперь я знаю, что () [- 1] мне подходит.

Оценивает каждый из его операндов (слева направо) и возвращает значение последнего операнда.

В питоне

# ignore List comprehension
# [ele['val'] for ele in arr ]

from functools import reduce

arr = [{'id': 1, 'val': 100}, {'id': 2, 'val': 200}]
#
# use tuple ()[-1] result [100, 200]
result = reduce(lambda total, ele: (total.append(ele['val']), total)[-1], arr, [])

# use list[][-1] result [100, 200]
result = reduce(lambda total, ele: [total.append(ele['val']), total][-1], arr, [])

result1 = reduce(lambda total, ele: total if total.append(ele['val']) else total, arr, [])
# [100, 200]

В Javascript:

// ignore map [{'id': 1, 'val': 100}, {'id': 2, 'val': 200}].map(e=>e.val)
[{'id': 1, 'val': 100}, {'id': 2, 'val': 200}].reduce((total, ele) => (total.push(ele.val), total), [])
// [100, 200]

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Попытка написать Javascript на Python на самом деле не сработает, лучше сделать это Pythonic.

Как правило, предпочтительным способом построения списка из другого (или из любого другого конечного итерируемого) является использование понимания списка, то есть:

def test(*args):
    return [a for a in args]

но в ваших случаях, когда нет ни преобразования, ни фильтрации, есть еще более простой способ: просто передайте вашу последовательность конструктору list:

def test2(*args):
    return list(args)
0 голосов
/ 13 июня 2019

В Python есть один тип данных: кортеж, которого нет в JS.

Вы можете попробовать на Python:

a = (1, 2)
# a is (1, 2)
b = 1, 2
# b is also (1, 2), which is tuple

и в JS:

let a = (1, 2)
// a is 2
let b = 1, 2
// SyntaxError: Unexpected number

Итак, в заключение: и Python, и JS имеют оператор запятой, но один и тот же оператор может вести себя не одинаково.

Ключевым моментом является выражение, такое как (1, 2) будет оценено как кортеж (1, 2) в Python и последнее значение 2 в JS.

Кстати: в Python есть оператор запятой:

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

ссылка на python: круглые формы

...