Как передать несколько операторов со значением в качестве аргумента в метод python - PullRequest
0 голосов
/ 09 июля 2019

У меня есть функция, которая проверяет значения столбца, указанного в выражении. Метод примет указанное пользователем выражение в качестве аргумента функции и проверит то же самое для всего столбца. Пользователь может определить любое выражение. Как я могу передать пользовательское выражение с несколькими операторами в функции Вот мой псевдокод.

def myFunction(list1, condition) :
    for value in list1:
        if condition :
            print("out of range")
        else :
            print("within range")

list1 =[1, 2, 3, 0, 5, 10]
myFunction(list1, (value >= 9) & (value < 1))

1 Ответ

1 голос
/ 09 июля 2019

Вы не можете передать условие в этой форме, это не правильный синтаксис Python.Но вы можете создать простую функцию lambda и передать ее в качестве параметра:

def myFunction(list1, condition) :
    for value in list1:
        if condition(value):   # note we call here the lambda function
            print(value, "out of range")
        else :
            print(value, "within range")

list1 =[1, 2, 3, 0, 5, 10]

myFunction(list1, lambda value: (value >= 9) | (value < 1))

Печать:

1 within range
2 within range
3 within range
0 out of range
5 within range
10 out of range

РЕДАКТИРОВАТЬ: если функции lambda недостаточно, вы можетесоздайте стандартную функцию с помощью def и передайте ее myFunction как лямбду.

Или (как упомянуто в комментариях @Solonotix) любой объект с методом __call__).

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