如何将'if'语句传递给函数?
我想给一个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 )