我有一个从另一种语言移植的函数,你能帮我把它变成“pythonic”吗?
在这里,以“非pythonic”方式移植的函数(这是一个人工示例-每个任务都与一个项目或“none”相关联,我们需要一个不同项目的列表,不同意味着不重复.identifier属性,从任务列表开始):

@staticmethod
def get_projects_of_tasks(task_list):

    projects = []
    project_identifiers_seen = {}

    for task in task_list:

        project = task.project

        if project is None:
            continue

        project_identifier = project.identifier

        if project_identifiers_seen.has_key(project_identifier):
            continue

        project_identifiers_seen[project_identifier] = True
        projects.append(project)

    return projects

我甚至还没有开始让它“Pythic”不开始出错(例如,用“如果项目”标识符不是“无”,Fielter(),基于基于标识符的基于字典的注册表的谓词,使用SET()来复制副本,等等)。
编辑:
根据反馈,我有:
@staticmethod
def get_projects_of_tasks(task_list):

    projects = []
    project_identifiers_seen = set()

    for task in task_list:

        project = task.project

        if project is None:
            continue

        project_identifier = project.identifier

        if project_identifier in project_identifiers_seen:
            continue

        project_identifiers_seen.add(project_identifier)
        projects.append(project)

    return projects

最佳答案

这段代码没有什么不合理的地方。一些可能的改进:
project_identifiers_seen可能是一个集合,而不是字典。
foo.has_key(bar)的拼写更好
我怀疑这是一门课。通常不需要python中的类,除非您实际在进行数据封装。如果这只是一个正常的功能,请将其设为模块级。

08-24 22:55