def _get_xunit_setup_teardown(holder, attr_name, param_obj=None):
<EOL>param_obj = param_obj if param_obj is not None else holder<EOL>result = _get_non_fixture_func(holder, attr_name)<EOL>if result is not None:<EOL><INDENT>arg_count = result.__code__.co_argcount<EOL>if inspect.ismethod(result):<EOL><INDENT>arg_count -= <NUM_LIT:1><EOL><DEDENT>if arg_count:<EOL><INDENT>return lambda: result(param_obj)<EOL><DEDENT>else:<EOL><INDENT>return result<EOL><DEDENT><DEDENT>
Return a callable to perform xunit-style setup or teardown if
the function exists in the ``holder`` object.
The ``param_obj`` parameter is the parameter which will be passed to the function
when the callable is called without arguments, defaults to the ``holder`` object.
Return ``None`` if a suitable callable is not found.