gpt4 book ai didi

python - 还记得上次函数调用的结果吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:53:29 24 4
gpt4 key购买 nike

我最近在求职面试中遇到了编程挑战,问题非常简单。写一个类,有两个函数: (1) allocate(some_string),根据参数返回一个字符串,只是返回值是参数加上一个数字。例如调用allocate("apple")会返回apple1,再次调用会返回apple2,等等。 (2) deallocate(some_string) 接收一个参数并使该字符串再次可用。意思是如果我调用 deallocate("apple1") 然后再次调用 allocate("apple")allocate 会返回给我 apple1

这是我的代码:

class Tracker:
def __init__(self):
self.returned_host_names = set()
self.host_type_so_far = set()

def allocate(self, host_type):
self.counter = 0
self.host_type_so_far.add(host_type)
if host_type in self.host_type_so_far:
self.counter+=1
while True:
maybe_hostname = host_type + str(self.counter)
if maybe_hostname not in self.returned_host_names:
self.returned_host_names.add(maybe_hostname)
print(self.returned_host_names)
return maybe_hostname
else:
self.counter+=1

def deallocate(self, hostname):
if hostname in self.returned_host_names:
self.returned_host_names.remove(hostname)

__init__其实没有自带代码;那是我自己加的。我目前正在使用这两个集合来记住已返回的内容,然后解除分配以将它们从集合中删除。我的问题是因为没有给出 __init__,我有没有不同的方式来写分配?我最初的想法是在 allocate() 中初始化这两个集合,但显然这行不通。

最佳答案

您可以在 allocate 方法中初始化 self.returned_host_namesself.host_type_so_far,而不是检查对象是否已经具有该属性使用 hasattr。并且为了防止 deallocate 方法在 allocate 之前调用时由于未初始化的 self.returned_host_names 引发异常,您可以添加一个 try-except 将它包围起来:

class Tracker:
def allocate(self, host_type):
if not hasattr(self, 'returned_host_names'):
self.returned_host_names = set()
self.host_type_so_far = set()
self.counter = 0
self.host_type_so_far.add(host_type)
if host_type in self.host_type_so_far:
self.counter+=1
while True:
maybe_hostname = host_type + str(self.counter)
if maybe_hostname not in self.returned_host_names:
self.returned_host_names.add(maybe_hostname)
print(self.returned_host_names)
return maybe_hostname
else:
self.counter+=1

def deallocate(self, hostname):
try:
if hostname in self.returned_host_names:
self.returned_host_names.remove(hostname)
except AttributeError:
pass

请注意,在 __init__ 方法之外初始化实例属性不是一个好的做法,我非常怀疑面试官真的不希望您编写自己的 __init__ 方法,即使没有为您提供方法。以上只是您如何让它发挥作用的示例,但不应在任何生产代码中使用该方法。

关于python - 还记得上次函数调用的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52942225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com