如何将'if'语句传递给函数?

4 投票
3 回答
20248 浏览
提问于 2025-04-16 21:20

我想给一个Python函数传递一个可选的“如果”条件,让它执行一些操作。比如,这个函数可能是把一些文件从一个文件夹复制到另一个文件夹,但它可以接受一个可选的条件。

举个例子,第一次调用这个函数时,可以说“如果源文件的名字是以‘.exe’结尾的,就把文件从源文件夹复制到目标文件夹”if source.endswith(".exe")

下一次调用时,可以直接把文件从源文件夹复制到目标文件夹,而不需要任何条件。

再下一次调用时,可以说“如果今天是星期一,就把文件从源文件夹复制到目标文件夹”if today is monday

那么,如何把这些条件传递给Python中的函数呢?

3 个回答

0

你可以试试用这样的东西:

def copy_func(files, destination, condition=None):
    for fileName in files:
        if condtition is None or condition(fileName):
            #do file copy

copy_func(filesToCopy, newDestionation) # without cond
copy_func(filesToCopy, newDestionation, lambda x: x.endswith('.exe')) # with exe cond
5

你可以把一个叫做“lambda表达式”的东西当作可选参数传进去:

def copy(files, filter=lambda unused: True):
    for file in files:
        if filter(file):
            # copy

这个默认的lambda表达式总是返回“真”,也就是说,如果你没有指定任何条件,所有的文件都会被复制。

14

函数其实是对象。它就是一个能返回真假结果的函数。

def do_something( condition, argument ):
   if condition(argument):
       # whatever

def the_exe_rule( argument ):
    return argument.endswith('.exe')

do_something( the_exe_rule, some_file )

Lambda 是创建这种函数的另一种方式。

do_something( lambda x: x.endswith('.exe'), some_file )

撰写回答