Python-如何在每个getter之后向列表添加对象(如何在getter中重复类似的逻辑)

问题描述 投票:0回答:2
itemList = []

def getItemA():
    item = GenerateItem(val1, val2)
    itemList.append(item)
    return item

def getItemB():
    item = GenerateItem(val3, val4)
    itemList.append(item)
    return item

a = getItemA()
print itemList # Should only print a

在实际代码中,我将有一百多个getItem()函数。在某些地方,我只会根据需要调用其中的一些getItem()函数,这就是为什么我要使用这些吸气剂的原因。

在每个函数中添加此行itemList.append(item)会引入人为编程错误,并可能不必要地增加源代码文件的长度。

我如何进行每次吸气剂呼叫itemList.append(item)?有没有一种花哨的方法可以将所有这些逻辑包装到我没有想到的包装函数中?我很确定装饰器将无法工作,因为它们看不到函数内部的变量,因此我也必须为我制作的每个函数重复这些装饰器。

注意:答案必须在Python2中。无法在工作中使用Python3。

[注意:这些getters()的意图是放在类似Constants的文件中,我们许多不同的测试脚本在其中将它们称为这些getter。

python python-2.7 repeat getter
2个回答
0
投票

为什么首先要在getter中填充itemList?

您可以做的是,当您调用这样的吸气剂时,添加一行以将相应项附加到列表中

a = getItemA() itemList.append(a)


0
投票

最简单的解决方案是泛泛泛泛的功能。每个getItem#函数之间的唯一区别是传递给GenerateItem的参数。只需将数据传递到getItem

def getItem(arg1, arg2):
    item = GenerateItem(arg1, arg2)
    itemList.append(item)
    return item

a = getItem(val1, val2)
b = getItem(val3, val4)

如果需要具有特定名称的功能,只需创建别名。使用functools.partial

可以轻松完成此操作
from functools import partial

getItemA = partial(getItem, val1, val2)
getItemB = partial(getItem, val3, val4)

a = getItemA()
b = getItemB()

将参数partial应用于getItem,并且返回非arg函数并将其放在别名中。

© www.soinside.com 2019 - 2024. All rights reserved.