我有一个带有一组明确参数的函数,但是在开发期间,它收到的参数数量可能会发生变化。 每个参数可以是字符串或列表。我想通过函数的参数循环,如果它们是一个字符串,将它们转换为具有该单个元素的列表。
我尝试使用locals()
来循环参数,但我不知道如何在迭代期间修改值,所以我猜这不是正确的方法:
def function(a, b, c, d):
for key in locals():
if type(key) == str:
# ??? key = list(locals[key])
# ... more code over here, assuming that a,b,c,d are lists
正确的方法是什么?
谢谢!
答案 0 :(得分:1)
您可以使用isinstance(key, str)
检查变量是否为str
def function(a, b, c, d):
l= locals()
for i in l:
key = l[i]
if isinstance(key, str):
l[i] = [l[i]]
l = l.values()
print (l)
function('one', 'two', ['bla','bla'], ['ble'])
如果你想要列表,那么你需要一行
l = l.values()
这将是
[['a'], ['c'], ['b'], ['d']]
编辑:正如您所建议的那样,正确的程序是
def function(a, b, c, d):
l= locals()
dirty= False
for i in l:
key = l[i]
if isinstance(key, str):
l[i] = [l[i]]
dirty= True
if dirty:
function(**l)
else:
print a, b, c, d
print (l)
function('one', 'two', ['bla','bla'], ['ble'])
这将输出
['one'], ['bla', 'bla'], ['two'], ['ble']
答案 1 :(得分:1)
def use_args(*args):
# covert strings to `list` containing them
new_args = map(lambda x: [x] if isinstance(x, str) else x, args)
return new_args
print use_args([1, 2], "3")
输出:
[[1, 2], ['3']]
答案 2 :(得分:0)
def function(*args):
arg_list = list(args)
for i in range(len(arg_list)):
if type(arg_list[i]) == str:
#Do the stuff
elif type(arg_list[i]) == list:
#Do the stuff
else:
#Do the stuff
function ('a','b', ['c', 'd', 'e'])