我正在努力理解一段代码,这是一个更大问题集的一部分。代码如下(注意WordTrigger
是Trigger
)的子类:
class WordTrigger(Trigger):
def __init__(self,word):
self.word=word
def isWordin(self, text):
text = [a.strip(string.punctuation).lower() for a in text.split(" ")]
for word in text:
if self.word.lower() in word.split("'"):
return True
return False
因此,第5行的工作是剥离标点符号文本并使其小写。 string.split(" ")
方法创建文本中所有单词的列表,拆分它们并在其间插入空格。 for语句检查'word'是否在'text'中。那么它是否从构造函数中识别变量'word'?
self.word.lower()
是否使构造函数初始化的单词全部小写? 'for'循环中的'if'条件是否确保搜索'alert'字样不会排除带撇号的单词?
答案 0 :(得分:3)
那么它是否从构造函数中识别变量'word'?
没有。方法中定义的变量是该方法的局部变量,而对象属性(如self.word
)不会与局部变量混淆(如word
)。
self.word.lower()是否使构造函数初始化的单词全部小写?
没有。字符串在Python中是不可变的。它返回一个新字符串 - self.word
的低版本。
'for'循环中的'if'条件是否确保搜索 'alert'字样不排除带撇号的单词?
似乎对我而言。
答案 1 :(得分:2)
第1个问题:for-statement检查' word'是在'文本'。那么它是否识别变量' word'来自构造函数?
for语句word
是一个局部变量,与self.word
不同。如果您愿意,您可以用item
或任何变量名替换for循环。
第二个问题:self.word.lower()是否使构造函数初始化的单词全部小写?
不,它不是因为它们是两个不同的东西。 word
局部变量是列表text
中的每个项目。 self.word
是您在第一次实例化时传递给WordTrigger
对象的变量。