首页 > 解决方案 > 具有另一个函数作为可选参数的函数

问题描述

我正在尝试编写一个将另一个函数作为可选参数的函数。我对语法有点困惑(和困惑)。我希望 func2 成为可选参数。所以我只希望它在 func1 中调用它时工作。当我有更复杂的文件模式时,我希望它可以用作过滤器功能。glob.glob(files + '/*')可以给出指定目录下的所有文件。(glob.glob(path + '/' + file_name + '*'))可以提供更复杂的模式,我只是不确定如何将它实现为可选函数参数。任何帮助将非常感激!

import glob

def func1(dirs, func2):

    if type(dirs) == list:
        for files in dirs:
            files = glob.glob(files + '/*')
            print(files) # prints all of the file names in each directory given
            if func2:
                func2(file_name)          



def func2(file_name):
    if file_name in files:
        print(file_name)
        # (glob.glob(path + '/' + file_name + '*'))

func1(['C:\path\to\files1\', 'C:\path\to\files2\'], func2('test2'))

对于此示例,假设 \files1 包含“test1.txt”和“test2.txt”,而 files2 包含“test1.jpg”和“test2.jpg”。我想func1打印 test2.txt 和 test1.jpg 的路径。

标签: pythonpython-2.xglob

解决方案


唯一的区别是你如何传递函数。你目前正在通过returnof func2('test2'),你应该只是通过func2。还要确保传递files给 func2,否则将不会被定义。

import glob

def func1(dirs, func2, another_variable):

    if type(dirs) == list:
        for files in dirs:
            files = glob.glob(files + '/*')
            print(files) # prints all of the file names in each directory given
            if func2:
                func2(another_variable, files)          



def func2(file_name, files):
    if file_name in files:
        print(file_name)
        # (glob.glob(path + '/' + file_name + '*'))

func1(['C:\path\to\files1\', 'C:\path\to\files2\'], func2, 'test_2')

推荐阅读