.lower() 和正则表达式在同一行?

.lower() and a regular expression in the same line?

我有一个消除所有非字母字符的正则表达式

def genLetters(string):
  regex = re.compile('[^a-zA-Z]')
  newString = regex.sub("", string)  

如果我想把这个字符串变成小写,我必须定义一个新的字符串(因为它们是不可变的),比如
lowerString = newString.lower()
对我来说,我必须制作第二个字符串只是为了降低,这似乎很愚蠢,但是如果我从正则表达式中删除 A-Z ,我会丢失任何我不想要的大写字符。我只想要所有小写字母的最终产品。

这可以不用 lowerString 来完成吗?或者更酷,可以在一行中完成吗?

newString = regex.sub("", string).lower()

试着把 "functions returning" 想象成 "replacing the function call with the return value of the function"。例如在上面的例子中,regex.sub 首先被评估,你应该想象那个调用被 return 值代替:

newString = "some String after substitution".lower()

这意味着您可以对 regex.sub 的 return 值上的字符串执行任何操作。您还可以在 lower().

的 return 值上调用方法

这也意味着您可以在一行中完成所有功能!

newString = re.compile('[^a-zA-Z]').sub("", string).lower()

虽然这可能不太可读。

顺便说一句,python中的标准命名约定不是驼峰式而是带下划线,所以newString应该是new_string