Python函数没有返回任何值

时间:2013-01-28 16:23:40

标签: python python-3.x

我无法弄清楚为什么以下两个印刷语句会有所不同      结果。请问任何人请解释一下吗?我只是举一个小例子。第一个print语句表中的表被替换为特殊字符,第二个表示正确的字符。

import re  

def tblcnv( str ):  
    rtval = re.sub("table", "chair", str)  
    return rtval  

rval = "<table is in the place where you sit daily "  
tblcnt = re.sub(r"<(table.*place)", tblcnv('\1'), rval)  

print tblcnt  
print tblcnv("<table is in the place where you sit daily")

3 个答案:

答案 0 :(得分:2)

这一行:

tblcnt = re.sub(r"<(table.*place)", tblcnv('\1'), rval)

可能不会做你认为应该做的事情。对tblcnv('\1')的调用会返回'\ 1',这是您看到的笑脸,然后用所述笑脸替换字符串的第一个块。

答案 1 :(得分:2)

定义tblcnt时,你传递的是tblcnv('\ 1')。 '\ 1'是包含值为0x01的单个字节的字符串。所以tblcnv的结果是相同的字符串。

答案 2 :(得分:1)

根据re.sub手册,它需要一个“为模式的每个非重叠事件调用”的函数。由于这些事件实际上是匹配对象,因此您最好使用简单的lambda表达式,该表达式提取匹配对象的group(1)并将其传递给tblcnv函数。

import re

def tblcnv( str ):  
    rtval = re.sub("table", "chair", str)  
    return rtval  

rval = "<table is in the place where you sit daily "  
tblcnt = re.sub(r"<(table.*place)", lambda m: tblcnv(m.group(1)), rval)  

print tblcnt  
print tblcnv("<table is in the place where you sit daily")