Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将函数列表应用于单个动态字符串_Python_Python 3.x - Fatal编程技术网

Python 将函数列表应用于单个动态字符串

Python 将函数列表应用于单个动态字符串,python,python-3.x,Python,Python 3.x,我正在创建一个小型python应用程序,将文件名格式化为一组规则。我在寻找将常规格式函数列表应用于相同字符串的方法时遇到问题。我想应用一个函数,然后是另一个,然后是另一个 我设法找到了一种可行的方法,但我觉得这很笨拙 这里我有一个列表列表,其中包括一个函数和一个kwargs字典。(所有这些函数都有一个字典中未包含的“text”参数) 然后,我将其传递到custom\u rename函数中。它在函数列表上循环,并将其应用于“text”变量。如您所见,每次调用func(text,**kwargs)时

我正在创建一个小型python应用程序,将文件名格式化为一组规则。我在寻找将常规格式函数列表应用于相同字符串的方法时遇到问题。我想应用一个函数,然后是另一个,然后是另一个

我设法找到了一种可行的方法,但我觉得这很笨拙

这里我有一个列表列表,其中包括一个函数和一个kwargs字典。(所有这些函数都有一个字典中未包含的“text”参数)

然后,我将其传递到
custom\u rename
函数中。它在函数列表上循环,并将其应用于“text”变量。如您所见,每次调用
func(text,**kwargs)
时,变量都会更改

def custom_rename(text, functions_list):

    # Apply a list of functions to a string
    for func_list in functions_list:
        func = func_list[0]  # Function
        kwargs = func_list[1]  # Dictionary
        try:
            text = func(text, **kwargs)
        except AttributeError:
            pass

    return text

有没有更优雅的方法?一、 例如,我不喜欢这样,我必须知道函数在[0]位置,字典在[1]位置。

您可以使用创建包含已烘焙参数的可调用项,而不是存储
[function,arguments]
列表:

from functools import partial

functions = [
    partial(SRF.change, old='.', new=' '),
    partial(SRF.surround, value=SU.get_year),
    partial(SRF.remove, chars='[],'),
    SRF.capitalize_words,
    partial(SRF.remove_including, value='mp4')
]
现在,您的
自定义\u重命名功能可以简化为:

def custom_rename(text, functions_list):
    # Apply a list of functions to a string
    for func in functions_list:
        try:
            text = func(text)
        except AttributeError:
            pass

    return text

您可以使用来创建带有已烘焙参数的可调用项,而不是存储
[函数,参数]
列表:

from functools import partial

functions = [
    partial(SRF.change, old='.', new=' '),
    partial(SRF.surround, value=SU.get_year),
    partial(SRF.remove, chars='[],'),
    SRF.capitalize_words,
    partial(SRF.remove_including, value='mp4')
]
现在,您的
自定义\u重命名功能可以简化为:

def custom_rename(text, functions_list):
    # Apply a list of functions to a string
    for func in functions_list:
        try:
            text = func(text)
        except AttributeError:
            pass

    return text

查看functools import reduce中的reduce
查看functools import reduce中的reduce