如何理解sub中复杂的lambda表达式?

时间:2014-05-26 05:53:34

标签: python

在我的问题中,how to escape the whole string in python? Martijn Pieters给了我一个很好的方法来解决它,但我不知道复杂的lambda表达式,

  • 的含义是什么?
    lambda m: m.group().encode('string_escape')
    
  • 如何解释

    re.sub(r'[\x00-\x1f\x7f-\xff]', lambda m: '\\{:o}'.format(ord(m.group())), filename)
    

1 个答案:

答案 0 :(得分:2)

python中的lambda表达式是一种匿名函数。

func = lambda m: m.group().encode('string_escape')

与以下内容相同:

def func(m):
    return m.group().encode('string_escape')

所以基本上,第一个lambda意味着:

  

调用传递的参数的group方法,并在其上运行encode('string_escape')

让我们来看看re.sub电话。正则表达式捕获代码在Ox00(十进制0)和Ox1f(31)之间或0x7f(127)和0xff(255)之间的所有字符。这匹配所有可打印的“标准”ASCII字符。

所以对于每一个,我们应用传递给调用的lambda(匹配的字符串将作为m传递):

lambda m: '\\{:o}'.format(ord(m.group()))

这是一个python字符串format调用,返回反斜杠\\,后跟传递给{:o}的第一个参数的八进制表示format。此参数是匹配字符(ord

的字符代码(m.group()