Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:返回语句的问题_Python_Function_Tuples_Return - Fatal编程技术网

Python:返回语句的问题

Python:返回语句的问题,python,function,tuples,return,Python,Function,Tuples,Return,我目前正在学习使用《深入Python 3》一书(以及其他书)进行Python编程。下面是本书第五章的示例,演示了如何使用列表函数来实现单词的多元化 import re def match_sxz(noun): return re.search('[sxz]$', noun) def apply_sxz(noun): return re.sub('$', 'es', noun) def match_h(noun): return re.search('[^aeioud

我目前正在学习使用《深入Python 3》一书(以及其他书)进行Python编程。下面是本书第五章的示例,演示了如何使用列表函数来实现单词的多元化

import re

def match_sxz(noun):
    return re.search('[sxz]$', noun)

def apply_sxz(noun):
    return re.sub('$', 'es', noun)

def match_h(noun):
    return re.search('[^aeioudgkprt]h$', noun)

def apply_h(noun):
    return re.sub('$', 'es', noun)

def match_y(noun):
    return re.sub('y$', 'ies', noun)

def apply_y(noun):
    return re.sub('y$', 'ies', noun)

def match_default(noun):
    return True

def apply_default(noun):
    return noun + 's'

rules = ((match_sxz, apply_sxz),
         (match_h, apply_h),
         (match_y, apply_y),
         (match_default, apply_default)
         )

def plural(noun):
        for (matches_rule, apply_rule) in rules:
            if matches_rule(noun):
                return apply_rule(noun)
问题是,当我试图在空闲状态下执行代码时,对于“student”(具有简单复数形式的单词)之类的单词,我没有得到正确的结果。遵守rest规则的单词没有问题

以下是我从口译员那里得到的信息:

>>> import plural
>>> plural.plural('copy')
'copies'
>>> plural.plural('hoax')
'hoaxes'
>>> plural.plural('beach')
'beaches'
>>> plural.plural('student')
'student'
真正奇怪的是,当我从解释器调用apply_default()函数时,工作就完成了

>>> plural.apply_default('student')
'students'

在您的代码中,
match_y
将始终计算为True。另外,请查看re.sub的文档:

re.sub(模式、应答、字符串、计数=0、标志=0)

答复。如果找不到模式,则返回的字符串将保持不变。答复 可以是字符串或函数;如果是字符串,则任何反斜杠 它中的逃逸被处理。即,\n被转换为单个 换行符\r转换为回车符,依此类推。 诸如\j之类的未知转义被单独保留。反向引用,例如\6, 替换为模式中第6组匹配的子字符串

资料来源:

您的
匹配功能错误:

def match_y(noun):
    # return re.sub('y$', 'ies', noun)   # NO!
    return re.search('y$', noun)

它将始终返回一个非空字符串,当作为布尔值进行测试时,该字符串将计为
True
;因此,您应用了
apply_y
规则,该规则没有任何作用,因为您的单词上没有-y,并返回了结果(即原始单词)。

源代码中有一个输入错误:
match_y
使用
re.sub
而不是
re.search
您确定正在空闲运行最新版本的代码吗?我的猜测是,在确定更改后,您没有重新加载代码。神清气爽的眼睛总是有帮助的。谢谢
def match_y(noun):
    # return re.sub('y$', 'ies', noun)   # NO!
    return re.search('y$', noun)