将另一个函数作为可选参数的函数
Function with another function as an optional argument
我正在尝试编写一个将另一个函数作为可选参数的函数。我对语法有点困惑(和困惑)。我希望 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 的路径。
唯一的区别是传递函数的方式。您目前正在通过 func2('test2')
的 return
,您应该只通过 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')
在您的第一个函数中,使用不同名称的可选参数类型。
这足以完成您的代码。
import glob
def func1(dirs, printer=False):
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 printer is True:
func2(file_name)
def func2(file_name):
if file_name in files:
print(file_name)
# (glob.glob(path + '/' + file_name + '*'))
# EXECUTE WITHOUT FUNCTION CALLING FUNC2
func1(['C:\path\to\files1\', 'C:\path\to\files2\'])
# EXECUTE WITH FUNCTION CALLING FUNC2
func1(['C:\path\to\files1\', 'C:\path\to\files2\'],True)
或者,您可以通过将参数作为 lambda 传递来延迟对 func2 的调用
func1(['C:\path\to\files1\', 'C:\path\to\files2\'], lambda _ : func2('test2'))
或者如果您稍后使用不同的文件名
func1(['C:\path\to\files1\', 'C:\path\to\files2\'], lambda x : func2(x))
我正在尝试编写一个将另一个函数作为可选参数的函数。我对语法有点困惑(和困惑)。我希望 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 的路径。
唯一的区别是传递函数的方式。您目前正在通过 func2('test2')
的 return
,您应该只通过 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')
在您的第一个函数中,使用不同名称的可选参数类型。
这足以完成您的代码。
import glob
def func1(dirs, printer=False):
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 printer is True:
func2(file_name)
def func2(file_name):
if file_name in files:
print(file_name)
# (glob.glob(path + '/' + file_name + '*'))
# EXECUTE WITHOUT FUNCTION CALLING FUNC2
func1(['C:\path\to\files1\', 'C:\path\to\files2\'])
# EXECUTE WITH FUNCTION CALLING FUNC2
func1(['C:\path\to\files1\', 'C:\path\to\files2\'],True)
或者,您可以通过将参数作为 lambda 传递来延迟对 func2 的调用
func1(['C:\path\to\files1\', 'C:\path\to\files2\'], lambda _ : func2('test2'))
或者如果您稍后使用不同的文件名
func1(['C:\path\to\files1\', 'C:\path\to\files2\'], lambda x : func2(x))