使变量在任何()可见的外部使用

时间:2017-08-24 21:52:03

标签: python

如何在if语句之外打印匹配字符串?

strings = ("string1", "string2", "string3")
for line in file:
    if any(s in line for s in strings):
        print "s is:",s

表示:

NameError: global name 's' is not defined

4 个答案:

答案 0 :(得分:4)

您可以使用生成器,并呼叫next(..)

strings = ("string1", "string2", "string3")
for line in file:
    result = next((s for s in strings if s in line),None)
    if result is not None:
        print "s is:",s

如果找不到匹配并检查None的{​​{1}},我们会在next中使用s作为后备值。

请注意,这只会匹配匹配的第一个。如果还有更多,这些将不会被激活。但是,您可以使用None循环来修改代码:

for

答案 1 :(得分:4)

正如any document所说:

  

如果iterable的任何元素为true,则返回True。如果是可迭代的   空,返回False

并且您无法访问any(...) (生成器表达式范围)范围之外的中间变量。

为了实现这一目标,您可以改为:

strings = ("string1", "string2", "string3")
existed = None

for line in file:
    for s in strings:
        if s in line:
            existed = s
            break
    if existed:
        print "s is:",s

答案 2 :(得分:2)

你不能,变量只在生成器内声明。 您必须为此添加另一个for循环:

strings = ("string1", "string2", "string3")
for line in file:
    for s in strings:
        if s in line:
            print "s is:",s

但您可以使用itertools.product

避免嵌套for循环

答案 3 :(得分:0)

我同意@Willem Van Onsem的评论。

strings = ("string1", "string2", "string3")
for line in file:
    result = next((s for s in strings if s in line),None)
    if result is not None:
        print "s is:",result