【问题标题】:Understanding code with string methods用字符串方法理解代码
【发布时间】:2012-11-06 15:45:00
【问题描述】:

我正在努力理解属于更大问题集的一段代码。代码如下(注意WordTriggerTrigger的子类):

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 语句检查“单词”是否在“文本”中。那么它是否从构造函数中识别出变量“单词”?

self.word.lower() 是否使构造函数初始化的单词全部小写? 'for' 循环中的 'if' 条件是否确保搜索 'alert' 单词不会排除带有撇号的单词?

【问题讨论】:

    标签: python string class methods


    【解决方案1】:

    那么它是否从构造函数中识别出变量'word'?

    没有。在方法中定义的变量是该方法的局部变量,对象属性(如self.word)不会与局部变量(如word)混淆。

    self.word.lower() 是否让构造函数初始化的单词全部小写?

    没有。字符串在 Python 中是不可变的。它返回一个新字符串——self.word 的小写版本。

    “for”循环中的“if”条件是否确保搜索 for 'alert' words 不排除带撇号的单词?

    对我来说似乎是正确的。

    【讨论】:

    • 谢谢!一个后续问题:为什么需要将 self.word 设为小写? 'text = [a.strip(string.punctuation).lower() for a in text.split(" ")]' 这行不是已经完成了吗?换句话说,那行不是将“text”中的每个“a”(即每个单词)都变成小写并去掉标点符号吗?
    • @user1552159 不。同样,请记住 wordself.word 是不同的。如果变量名稍微改变一下,代码就不会那么混乱了:例如,text_words 而不是text,然后是for tw in text_words
    • 好的,那么 self.word 指的是对象的属性,但“word”(我已改为“tw”)指的是单词列表中的每个元素(即 text_words)通过分解一大块文本创建。所以你需要 'a.strip(string.punctuation).lower()' AND 'self.word.lower()' 的原因是第一次使用 .lower() 时, text_words 列表中的每个元素都是被设为小写并且第二次使用 .lower() 时,对象的属性“word”(由 self.word 表示)被设为小写。那是对的吗?再次感谢您的帮助!
    • @user1552159 是的,这是一个很好的解释,非常欢迎您。
    【解决方案2】:

    第一个问题:for 语句检查“单词”是否在“文本”中。那么它是否从构造函数中识别出变量'word'?

    for 语句的word 是一个局部变量,与self.word 不同。你基本上可以用item 或任何你喜欢的变量名替换那个for循环。

    第二个问题:self.word.lower() 是否将构造函数初始化的单词全部小写?

    不,不是因为它们是两个不同的东西。 word 局部变量是列表 text 中的每个项目。 self.word 是您第一次实例化 WordTrigger 对象时传入的变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 2021-03-06
      • 2013-06-22
      • 1970-01-01
      相关资源
      最近更新 更多