Python 返回两种类型的字符串之一
我有一个Python函数,它可以返回两种类型的返回值之一,Python 返回两种类型的字符串之一,python,class,return,return-value,Python,Class,Return,Return Value,我有一个Python函数,它可以返回两种类型的返回值之一,animal或food。两者都是字符串类型。现在,我通过始终返回两个值来区分这两个值,并断言其中只有为True: def help(x): if some_condition(x): return 'monkey', None elif # ... animal = some_fantasy_animal(x) return animal, None elif #..
animal
或food
。两者都是字符串类型。现在,我通过始终返回两个值来区分这两个值,并断言其中只有为True
:
def help(x):
if some_condition(x):
return 'monkey', None
elif # ...
animal = some_fantasy_animal(x)
return animal, None
elif #..
food = some_food_no_one_has_ever_heard_of(x)
return None, food
elif # ...
return None, 'steak'
# ...
def main():
animal, food = help('ddd')
if animal:
assert(not food)
# do something useful
pass
else:
assert(food)
# do something useful
pass
return
一定有更好的方法来处理这个问题。有哪些选择?您的场景有点奇怪 您可能希望创建一个Animal类和一个Food类,并让它们派生自一些公共基类。然后,您可以使用
isinstance
或更好的方法,忘记if
条件并调用在基类中定义的方法,您可以为每种类型重写该方法
如果食物和动物之间没有共同点,那么您可能不应该有一个函数可以返回任何一种类型。那么,您可以创建一组动物和食物,如:
animals={'hippo', 'monkey'}
food={'bananas', 'steak'}
然后在操作员中检查:
h = help('ddd')
if h in animals:
...
elif h in food:
...
这可能是一个解决办法。将数据表示为:
data = {'animal':['cat','dog'], 'food':['steak','egg']}
要检查某个值x
是否为动物或食物:
t = [k for k, v in data.iteritems() if x in data[k]]
t
将包含特定项所属的类。请注意,如果动物
也作为食物
,则t
将同时包含这两种。有点灵活 您可以创建一个类,该类接受参数并传递所有引用的逻辑,以确定内部类型:
例如:
class Result(object):
def __init__(self, animal=None, food=None):
self.animal = animal
self.food = food
@property
def is_animal(self):
return self.animal != None
@property
def is_food(self):
return self.food != None
def help(x):
if x == 1:
return Result(animal='monkey')
elif x == 2:
return Result(animal='hippo')
elif x == 3:
return Result(food='bananas')
else:
return Result()
if __name__ == '__main__':
result = help(3)
if result.is_animal:
print result.animal
if result.is_food:
print result.food
也许要一本字典?键将指示类型。似乎有多种方法可以做到这一点。@Noob是的……你可以使用字典来创建单词和类型之间的映射。这可能更简单。什么是动物和食物?实际上,我用来构建配置文件的字符串。根据不同的类型,他们承担不同的角色。animal
-food
隐喻就是要抽象掉这一点。它们是一个类的实例吗?是的,它们都是string
s。好吧,我明白你在做什么,我会用类来区分你的对象,让你的生活更轻松。我无法提供一个全面的food
或animal
列表。根据x
,它们可以假设任何值。我们如何知道某个字符串是动物还是食物?嗯,help()
知道。暴露这些信息是问题的关键。我无法提供一套全面的食品
s或动物
s。它们可以采用任何值,具体取决于x
。