如何立即将函数参数转换为小写(不在函数体内)?

Sir*_*Lot 2 python

有没有办法在 python 中做类似的事情?

def foo(str(arg).lower()):
    print arg

foo('LOL')
Run Code Online (Sandbox Code Playgroud)

我首先想创建装饰器,但无论我尝试什么,我都无法让它按我想要的方式工作,我要么返回生成器,要么列出生成器。

编辑:这就是我想要完成的。

def to_lowercase(function):
    def wrapper(*args):
        return function(*[x.lower() if isinstance(x, str) else x for x in args])
    return wrapper
Run Code Online (Sandbox Code Playgroud)

Hal*_*Ali 5

可以编写一个装饰器来完成您想要的操作:

装饰器是接受函数作为第一个参数并接受参数作为下一个参数的函数。然后返回一个不同的函数,或者在应用于输入函数之前以某种方式修改参数。

在这里,如果参数是 的实例,我们可以将参数修改为小写str,否则使用推导式保持不变:

def tolower(f, *args, **kwargs):
    def newfun(*args, **kwargs):
        as_ = [a.lower() if isinstance(a, str) else a for a in args]
        kws_ = {k: (v.lower() if isinstance(v, str) else v) for k,v in kwargs.items()}
        return f(*as_, **kws_)
    return newfun

@tolower
def print_lower(x, y, z):
    print(x)
    print(y)
    print(z)

print_lower('A', 'B', 1)
# outputs
a
b
1
Run Code Online (Sandbox Code Playgroud)