在Python中使用for和if

alw*_*btc 2 python for-loop if-statement colon

你能看一下下面的代码:

def search(self, filter):
        return [note for note in self.notes if note.match(filter)]
Run Code Online (Sandbox Code Playgroud)

我想for,if声明需要冒号.以上,没有冒号后forif.这种if和for用法看起来不像我在教科书中看到的那样.我通常读到的是这样的:

for note in self.notes:
    some code
Run Code Online (Sandbox Code Playgroud)

要么

if note.match(filter):
    some code
Run Code Online (Sandbox Code Playgroud)

请您解释一下这种iffor使用,它不包括冒号,这是一个单行的语句.Anf if子句在声明的最后.真的很困惑.

dig*_*All 9

这不仅仅是一个循环/ if,而是一个列表理解

特别是这段代码:

return [note for note in self.notes if note.match(filter)]
Run Code Online (Sandbox Code Playgroud)

对于每个音符,self.notes仅返回与过滤条件匹配的音符.

这基本上是一个过滤器,但通常你也可以使用列表推导来"转换"列表元素,例如:

[1000 * x for x in myNumbers if x < 2]
Run Code Online (Sandbox Code Playgroud)

  • @alwbtc - "filter"是内置函数名,但不是保留标识符.您可以使用它来命名别的东西,并且您的定义将(暂时)覆盖标准的定义.这通常被认为是不好的形式,因为它令人困惑,但是当你刚开始时,不能指望你知道所有不完全保留的名字.无论如何,一些(可能是所有)IDE将像许多人类读者一样被这个名称所迷惑 - 并且突出它就好像它是内置的. (2认同)