Обнаружение определений пустых функций в python

Мне нужно определить, является ли функция пустым определением или нет. Это может быть как:

def foo(): pass 

или вроде:

 def foo(i, *arg, **kwargs): pass 

или вроде:

 foo = lambda x: None 

Каков самый элегантный способ обнаружить их с помощью модуля «проверка»? Есть ли лучший способ, чем это:

 def isEmptyFunction(func): e = lambda: None return func.__code__.co_code == e.__code__.co_code 

    3 Solutions collect form web for “Обнаружение определений пустых функций в python”

    Метод, который вы предлагаете, не совсем работает, потому что пустые функции, имеющие docstrings, имеют немного отличающийся байт-код.

    Значение func.__code__.co_code для пустой функции без docstring равно 'd\x00\x00S' , а значение для функции с docstring – 'd\x01\x00S' .

    Для моих целей он работает только для добавления дополнительного случая для тестирования:

     def isEmptyFunction(func): def empty_func(): pass def empty_func_with_doc(): """Empty function with docstring.""" pass return func.__code__.co_code == empty_func.__code__.co_code or \ func.__code__.co_code == empty_func_with_doc.__code__.co_code 

    То, как вы работаете. Возможно, более «элегантное» решение состояло бы в том, чтобы иметь список функций, а во всех ваших пустых (или всех ваших непустых) функциях вы могли бы добавить его в список, а затем проверить, находится ли функция в списке или нет ,

    Почему ты бы так поступил? Это выглядит плохой дизайн. Готов поспорить, что вы ничего не сделаете быстрее.

     python -m timeit -s'def a(): pass' -s'def b(): pass' 'if a.__code__.co_code == b.__code__.co_code: pass' 1000000 loops, best of 3: 0.293 usec per loop python -m timeit -s 'def a(): pass' -s 'def b(): pass' 'a()' 10000000 loops, best of 3: 0.0941 usec per loop 

    Похоже, что это величина медленнее сравнивать, чем просто звонить, потому что в последнее время было в 10 раз больше циклов. Фактически оператор equals вызывает a. код .co_code. экв . Таким образом, вы просто делаете вещи медленнее.

    Python - лучший язык программирования в мире.