如何程序化批量设置Python Lambda及绑定参数函数的名称?
Option 1: Create Named Lambdas From Scratch
If you're defining the lambdas yourself, wrap the creation process in a helper function that automatically sets the __name__ attribute. This saves you from manual assignments every time:
def named_lambda(name, func): func.__name__ = name return func # Usage example myfun = named_lambda('myfun', lambda x: 2*x) print(myfun) # Output: <function myfun at 0x...>
Option 2: Rename Existing Lambdas
If you already have a collection of lambdas (e.g., stored in a list), pair them with their desired names and loop through to assign __name__:
# Your existing lambdas lambda_functions = [lambda x: 2*x, lambda y: y+1, lambda z: z**2] # Corresponding names you want lambda_names = ['double', 'increment', 'square'] for func, name in zip(lambda_functions, lambda_names): func.__name__ = name # Test it print(lambda_functions[0]) # Output: <function double at 0x...>
f_many_args Have Meaningful Names Since you're fixing b and c values for f_many_args, use functools.partial to create a partially applied function, then customize its __name__ to include the fixed parameters for clarity.
Step 1: Basic Approach
from functools import partial from mymodule import f_many_args # Assume your global values are set b_global = 10 c_global = 20 # Create the partial function f_partial = partial(f_many_args, b=b_global, c=c_global) # Set a descriptive name f_partial.__name__ = f"f_many_args(b={b_global}, c={c_global})" print(f_partial) # Output: <function f_many_args(b=10, c=20) at 0x...>
Step 2: Reusable Helper Function
To avoid repeating the name formatting, build a helper that generates the name automatically:
from functools import partial from mymodule import f_many_args def named_partial(func, **fixed_kwargs): partial_func = partial(func, **fixed_kwargs) # Generate a name that shows the fixed parameters param_string = ", ".join(f"{k}={v}" for k, v in fixed_kwargs.items()) partial_func.__name__ = f"{func.__name__}({param_string})" return partial_func # Usage b_global = 10 c_global = 20 f_partial = named_partial(f_many_args, b=b_global, c=c_global) print(f_partial) # Output: <function f_many_args(b=10, c=20) at 0x...>
This way, every time you create a partial version of f_many_args, it gets a self-documenting name without extra manual work.
内容的提问来源于stack exchange,提问作者00__00__00

