use*_*030 -4 python generator python-3.x
我今天早上构建了这个类,它工作得很好而且很紧凑,但因为它是通过调用一个新的生成器来工作的,每次我担心我会在内存中留下一堆。我很乐意在yield 语句之后立即使用finally 来执行此操作。看起来会干净一点。
class Enter:
def __init__(self,Entries, container=[], keyName = "Key", valueName = "Value"):
self.Dict = {}
self.Entries = Entries
self.container = container
self.keyName = keyName
self.valueName = valueName
def gen(self,dis):
print(dis)
yield input("Entry: ")
def enter(self):
for ea in range(self.Entries):
print("\nPlease input a", self.keyName, "then a", self.valueName)
x = next(self.gen("\nEnter a " + self.keyName + ":"))
y = next(self.gen("\nEnter a " + self.valueName + ":"))
self.Dict.update({x:y})
retrun self.Dict
def enterList(self):
lst = []
for ea in range(self.Entries):
print("\nSome Message")
x = next(self.gen("\nEnter: "))
lst.append(x)
if self.container == ():
lst = tuple(lst)
return lst
Dictionary = Enter(Entries = 2, keyName = "First Name", valueName="LastName").enter()
print(Dictionary)
output = Enter(Entries = 3, container= () ).enterList()
print(output)
Run Code Online (Sandbox Code Playgroud)
每个生成器对象都有大量的开销用于管理状态和所有内容。除非您出于正确的原因需要发电机,否则您应该避免使用它们。就您而言,您只能生产一件物品,您的生成器无法生产更多物品,并且该价值可以立即免费获得。所以在这里使用生成器是完全错误的。
相反,您可以enter像这样高效地编写函数,而无需任何开销:
def enter(self):
for ea in range(self.Entries):
print("\nPlease input a", self.keyName, "then a", self.valueName)
x = input("\nEnter a " + self.keyName + ":")
y = input("\nEnter a " + self.valueName + ":")
self.Dict[x] = y
return self.Dict
Run Code Online (Sandbox Code Playgroud)