繁体   English   中英

Python函数不返回任何值

[英]Python function returning no value

我不知道为什么下面的两个打印语句会给出不同的结果。 有人可以解释一下吗? 我只是举一个小例子。 第一个打印语句表中的表被替换为特殊字符,第二个给出正确的表。

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")

这行:

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

可能没有按照您的预期去做。 调用tblcnv('\\1')返回'\\ 1',这是您看到的笑脸,然后用该笑脸替换字符串的第一块。

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

根据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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM