我有一个验证函数,它根据允许值的控制列表检查从另一个函数返回的列表的成员。除了返回的列表包含单个字符串的情况外,这种方法很好。 Python然后将该字符串解释为字符列表。我是否可以将其处理为好像只有一个项目的列表?这是功能:
def validate(returned_list, control_list):
for y in range(len(returned_list)):
tf = False
for x in range(len(control_list)):
if returned_list[y] == control_list[x]:
tf = True
break
if tf == False:
return returned_list[y]
return "OK"
答案 0 :(得分:1)
您需要在此处检查类型。像这样:
def polymorphic(arg):
if isinstance(arg, basestring):
arg = [arg]
for item in arg:
print item
这是恕我直言,你应该像这样执行检查的少数几个例子之一。通常情况下,出于好的理由不鼓励这样做,因为你最终将强大的Python武装到了它不是的东西 - 一种静态类型的语言。但是,字符串的迭代行为使它偶尔变得必要。
答案 1 :(得分:1)
你可以试试这个:
def validate(returned_list, control_list):
returned_list = returned_list if isinstance(returned_list, list) else [returned_list]
for y in range(len(returned_list)):
tf = False
for x in range(len(control_list)):
if returned_list[y] == control_list[x]:
tf = True
break
if tf == False:
return returned_list[y]
return "OK"
答案 2 :(得分:0)
根据所有评论,这是修订后的功能:
def validate(returned_list, control_list):
if isinstance(returned_list, basestring):
returned_list = [returned_list]
for x in returned_list:
for y in control_list:
if x == y:
break:
else:
return x
return None