Лямбда-функция для возврата другого значения с использованием параметров - PullRequest
0 голосов
/ 12 марта 2020

Я хотел бы использовать функцию lambda для возврата значений. Это может быть обработано в функции, однако для этого упражнения предпочтительнее использовать лямбду. В общем, я хочу, чтобы lambda возвращал либо дату, либо 0, передавая второй параметр.

import datetime
none_func=lambda x: 0 if x is None else x
print(none_func(None))
print(none_func(7))
print(none_func(datetime.datetime(2020,1,1)))
### Here, update the lambda function to take an additional parameters, like returns a date if None as well
none_func=lambda x: datetime.datetime(1900,1,1) if x is None else x
print(none_func(None))
print(none_func(7))

Обновлен для уточнения:

Я хотел бы преобразовать функцию объединения до lambda.

def coalesce(x,return_schema='int'):
    if x is None and return_schema=='int': return 0
    elif x is None and return_schema=='date': return datetime.datetime(1900,1,1)
    else: return x

print(coalesce(7))
print(coalesce(None))
print(coalesce(None,return_schema='date'))
print(coalesce(datetime.datetime.today(),return_schema='date'))

Ответы [ 2 ]

1 голос
/ 12 марта 2020

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

import datetime

f = lambda x,return_schema="int": 0  if x is None and return_schema=='int' else ( datetime.datetime(1900,1,1) if x is None and return_schema=='date' else x)
print(f(7))
print(f(None))
print(f(None, return_schema='date'))
print(f(datetime.datetime.today(), return_schema='date'))

Надеюсь, это поможет.

0 голосов
/ 12 марта 2020

Вы ищете что-то вроде:


func = lambda x, y: 'default' if (x is None or y is None) else x

func(1, 2)        # returns 1
func(None, 1)     # returns 'default'
func(1, None)     # returns 'default'
func(None, None)  # returns 'default'

Или, если вы хотите что-то сделать только на основе второго параметра, просто измените оператор if, чтобы проверить значение этого.

...