Передать функцию отрицательно в качестве аргумента n - PullRequest
0 голосов
/ 01 апреля 2019

В Python я могу передать функцию в качестве параметра другой функции, т.е.

inspect.getmembers(random, callable)

Это даст мне все вызываемые члены переменной random. И callable - это функция, переданная для проверки (будут возвращены только члены переменной, удовлетворяющие проверке).

Мой конкретный вопрос заключается в том, как получить все не вызываемые аргументы, и в более широком смысле, есть ли способ передать "обратный" функции в качестве аргумента?

Я пробовал это:

inspect.getmembers(random, !callable)
inspect.getmembers(random, not callable)

И первое - это синтаксическая ошибка, а второе не работает.

В качестве обходного пути я определил свою собственную функцию:

def uncallable(object)
    return not callable(object)

И так это работает:

inspect.getmembers(random, uncallable)

Но мне интересно, есть ли более простое решение?

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Просто используйте лямбду:

inspect.getmembers(random, lambda x: not callable(x))
0 голосов
/ 01 апреля 2019

Просто напишите свою не вызываемую оболочку.

Ни один язык, о котором я знаю, не допускает ожидаемую арифметику функций высокого уровня.

Нет способа заставить такую ​​концепцию работать вообще.

Какова функция этих:?

! len
len + len
len + ! len

Итак, мы получили явно написанные функции высокого порядка, функции akka, которые принимают функции в качестве параметров и возвращают другие функции, подобные этой

def negate(func):
    def wrapped(*args, **kwargs):
        return not func(*args, **kwargs)
    return wrapped

uncallable = negate(callable)

Это тот же шаблон, что и для декораторов python.

...