Python:使用参数传递函数到内置函数?

时间:2010-07-04 00:51:51

标签: python refactoring

像这样question我想传递一个带参数的函数。但我想把它传递给内置函数。

示例:

files = [ 'hey.txt', 'hello.txt', 'goodbye.jpg', 'howdy.gif' ]

def filterex(path, ex):
  pat = r'.+\.(' + ex + ')$'
  match = re.search(pat, path)         
  return match and match.group(1) == ex) 

我可以使用带有for循环和if语句的代码,但它更短,使用filter(func,seq)可能更具可读性。但是,如果我理解正确,您使用过滤器的函数只接受一个参数,该参数是序列中的项目。

所以我想知道是否可以传递更多参数?

2 个答案:

答案 0 :(得分:8)

def make_filter(ex):
    def do_filter(path):
        pat = r'.+\.(' + ex + ')$'
        match = re.search(pat, path)
        return match and match.group(1) == ex
    return do_filter

filter(make_filter('txt'), files)

或者,如果您不想修改filterex:

filter(lambda path: filterex(path, 'txt'), files)

您可以使用列表推导,如gnibbler建议的那样:

[path for path in files if filterex(path, 'txt')]

您还可以使用生成器理解,如果您有一个大型列表,这可能特别有用:

(path for path in files if filterex(path, 'txt'))

答案 1 :(得分:3)

这是一个列表理解,它做同样的事情

import os
[f for f in files if os.path.splitext(f)[1]=="."+ex]