我有一个从另一种语言移植的函数,你能帮我把它变成“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中的类,除非您实际在进行数据封装。如果这只是一个正常的功能,请将其设为模块级。