Python中的简明返回语句

时间:2018-02-09 23:37:44

标签: python regex list-comprehension

我正在为类分配,我正在使用正则表达式返回指定字符串中所有模式匹配的位置。如果有匹配,我将返回索引,如果没有找到匹配,我需要返回None。我已成功完成此操作但想将整个表达式放在一行中,正如我在注释的return语句中尝试的那样。

def searchMotif(sequence, motif):
    if not type(motif) is str:
        raise Exception("Invalid Motif")
    #matches = re.finditer(motif, sequence)
    #indices = [(match.start(), match.end()) for match in matches]

    indices = [(match.start(), match.end()) for match in re.finditer(motif, sequence)]
    if indices:
       return indices
    else:
       return None

    #return [(match.start(), match.end()) for match in matches]
    #return [(match.start(), match.end()) for match in re.finditer(motif, sequence)]

理想情况下,我希望有一个类似的声明 return [(match.start(), match.end() for match in re.finditer(motif, sequence)] else None。我知道这种语法不正确,但我希望它能够实现我想要实现的目标。我是正则表达式和列表理解的新手,所以我不确定你是否可以在我的列表理解中使用if语句。

是否可以通过Regex迭代器填充列表并在return语句中检查它是否为空?

1 个答案:

答案 0 :(得分:2)

使用:

def test(): 
    return [] or None   

print(test())

输出:

None

原因是,任何空的可迭代(set,dict,list,string,...)都被视为False

代码为:

return indices or None # no if indices: needed

在此处阅读:https://docs.python.org/3/library/stdtypes.html#truth-value-testing

  

[...]大多数内置对象被认为是错误的:

     
      
  • 常量定义为false:None和False。
  •   
  • 任何数字类型的零:0,0.0,0j,十进制(0),分数(0,1)
  •   
  • 空序列和集合:'',(),[],{},set(),range(0)
  •   
     

[...]