gpt4 book ai didi

python - 有没有办法将函数转换为接受在函数之前评估的可调用对象?

转载 作者:太空宇宙 更新时间:2023-11-04 09:03:06 25 4
gpt4 key购买 nike

假设我有一个字符串列表:

names = ['Alice', 'Bob', 'Charlie']

我想使用一些函数 foo 将它们全部与特定的小写 字符串进行比较:

map(lambda name: foo('carol', str.lower(name)), names)

有没有办法改变 foo 来接受一个可调用的 bar ,它在 foo 被求值之前求值?所以我可以这样写:

map(partial(foo, 'carol', str.lower), names)  # foo sees the name in lowercase

最佳答案

这就是他们制作装饰器的目的!看一下将所有参数传递给某个函数的小写字母的装饰器:

 def lower_args(func):
@functools.wraps(func)
def _wrapper(*args, **kwargs):
l_args = map(str.lower, args)
l_kwargs = {(name, str.lower(value)) for (name, value) in kwargs}

return func(*l_args, **l_kwargs)
return _wrapper

这样使用:

@lower_args
def foo(a, b, c):
#and your code goes here

做你想做的事,稍微改变一下语法

def to_lower(mod_func):
def deco(func):
@functools.wraps(func)
def _wrapper(*args, **kwargs):
return func(*map(mod_func, args), {(k, mod_func(v)) for (k,v) in kwargs})
return _wrapper
return deco

像这样使用:

@to_lower(my_function)
def foo(a, b, c):
#your code goes here

关于python - 有没有办法将函数转换为接受在函数之前评估的可调用对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23522234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com