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

时间:2018-05-24 08:43:07

标签: python

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

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

foo('LOL')

我想首先创建装饰器,但无论我尝试什么,我都无法按照我的意愿使用它,我要么返回生成器或列表。

修改: 这就是我想要实现的目标。

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

1 个答案:

答案 0 :(得分:1)

可以写一个装饰来做你想要的事情:

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

如果它们是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