我正在清理一些污迹化的数据,因此我想使它们自动化一些。也就是说,我希望脚本具有一些预定义的清理函数,以便按应如何清理数据的顺序进行排序,并且我设计了一个装饰器,以使用this solution从脚本中检索这些函数:

from inspect import getmembers, isfunction
import cd # cleaning module
functions_list = [o[0] for o in getmembers(cd) if isfunction(o[1])]


这非常好用。但是,它确实以不同的顺序(by name)检索函数。

为了重现性目的,请考虑将以下清洁模块视为cd

def clean_1():
    pass


def clean_2():
    pass


def clean_4():
    pass


def clean_3():
    pass


解决方案输出:

['clean_1', 'clean_2', 'clean_3', 'clean_4']


需要在哪里:

['clean_1', 'clean_2', 'clean_4', 'clean_3']


可以解决主要问题的其他解决方案(不过考虑了性能)。

最佳答案

可以解决主要问题的其他解决方案(不过考虑了性能)。


为了能够在不自动包含帮助程序的情况下定义和导入帮助程序功能,如何使用显式列表:

def clean_1():
    pass


def clean_2():
    pass


def clean_4():
    pass


def clean_3():
    pass


cleaners = [
    clean_1,
    clean_2,
    clean_4,
    clean_3,
]


或显式装饰器:

cleaners = []
cleaner = cleaners.append


@cleaner
def clean_1():
    pass


@cleaner
def clean_2():
    pass


@cleaner
def clean_4():
    pass


@cleaner
def clean_3():
    pass


不过,就按顺序获取常规模块的属性而言,您应该能够在Python 3.7+中使用__dict__

functions_list = [k for k, v in cd.__dict__.items() if isfunction(v)]

关于python - 检索脚本中的可用功能(相同顺序),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54521087/

10-11 09:25
查看更多