繁体   English   中英

使用 lambda 表达式在 Python 中实现字符串包含函数

[英]Implement string contains function in Python with lambda expression

>>> a='test1'
>>> check_for_test1=lambda x:a in x
>>> check_for_test1('test1')
True
>>> a='test2'
>>> check_for_test2=lambda x:a in x
>>> check_for_test2('test1')
False
>>> check_for_test2('test2')
True
>>> check_for_test1('test1')
False

有什么办法可以让 check_for_test1 保持在“原始”测试变量上,即 test1?

当然,使用闭包:

>>> a='test1'
>>> check_for_test1 = (lambda needle: lambda x: needle in x)(a)
>>> check_for_test1('test1')
True
>>> a = 'foo'
>>> check_for_test1('test1')
True

请注意,您应该避免将 lambda 表达式的结果分配给 name lambda唯一目的是使函数匿名 这实际上明确违反了 PEP8 风格指南。

这通常称为工厂函数。

我会说,更pythonic的方式是:

def make_checker(needle):
    def checker(x):
        return needle in x
    return checker

这对我来说更清楚。

您可以使用默认值捕获关键字参数中的原始值:

a='test1'
check_for_test1=lambda x, a=a:a in x
print( check_for_test1('test1') )
a='test2'
check_for_test2=lambda x, a=a:a in x
print( check_for_test2('test1') )
print( check_for_test2('test2') )
print( check_for_test1('test1') )

印刷:

True
False
True
True

注意:注释中关于命名 lambda 的所有不好的地方都适用。 不要使用它们,您不必使用它们。

如果你不想让功能改变,当你更新的值a则使用字符串本身,而不是一个变量。

check_for_test1=lambda x: 'test1' in x
check_for_test2=lambda x: 'test2' in x

您可以使用带有常量的函数,更简洁的代码:

TEST1 = 'test1'
TEST2 = 'test2'

def check_for_test1(my_str):
    return TEST1 in my_str

def check_for_test2(my_str):
    return TEST2 in my_str

如果要动态创建检查方法:

def check_method_creator(my_str):
    def check_method(other_str):
        return my_str in other_str
    return check_method

check_for_test1 = check_method_creator('test1')
check_for_test2 = check_method_creator('test2')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM