我正在尝试使用kwargs创建我的第一个函数,并且在循环时遇到了一些麻烦。
我要传递两个kwarg:滴答声和开始声。勾号和开始号都将是字符串或字符串列表。
我想遍历kwarg以使用if elif对其进行分类,并包含正确的字符串和kwarg
[当kwarg通过测试时,我想获取该kwarg的值,并将其附加到与它的名称列表匹配的列表中(即,刻度线进入刻度线列表)
目前,我将所有kwargs值都添加到列表中,而不是我正在处理的kwarg值中。
[kwarg,kwargs和kwarg感到困惑的抱歉之间有区别。
def fn1(**kwargs):
ticks = []
start = []
# Iterating over the Python kwargs dictionary
for kwarg in kwargs: # For each kwarg in kwargs
if "ticks" in kwarg: #Test if "tick" in kwarg. If yes continue to line below, if not skip the next two lines
for kwarg in kwargs.values(): #for each i in kwargs values THIS IS WRONG
ticks.append(kwarg)
break # I use this to fix what is wrong
elif "start" in kwarg:
for kwarg in kwargs.values(): #Same problem as 5 lines up, and now I do not know how to either skip the first iteration of the loop or fix the original problem
start.append(kwarg)
print(ticks, start)
输入:
fn1(ticks= ["IBM", "AAPL"], start= "2")
输出:
[['IBM', 'AAPL']] [['IBM', 'AAPL'], '2']
所需的输出:
[['IBM', 'AAPL']] ['2']
不确定源代码中的逻辑,但是我做了一个可行的解决方案,可以返回所需的输出。
def fn1(**kwargs):
ticks = []
start = []
for kwarg, values in kwargs.items(): # For every kwarg in kwargs
if kwarg == "ticks":
ticks.append(values)
elif kwarg == "start":
start.append(values)
print(ticks, start)
fn1(ticks=["IBM", "AAPL"], start="2")
输出
# python test123.py
[['IBM', 'AAPL']] ['2']
在输出中,我看到您想将传递的kwarg值添加到数组中,但是在源代码中您正在对其进行迭代。不确定您到底在寻找什么,所以我已经通过获取所需的输出来完成它:)
您的for循环太多。当您使用**kwargs
时,它将创建一个名为kwargs
的字典。
fn1(ticks= ["IBM", "AAPL"], start= "2")
将创建一个这样的字典:
{'ticks': ['IBM', 'AAPL'],
'start': '2'}
您正在遍历这些键,然后遍历每个匹配键的所有值。
如果摆脱了外部for循环,则只需检查给定的字符串是否在字典中即可。然后,您可以遍历该键的值。
def fn1(**kwargs):
ticks = []
start = []
if "ticks" in kwargs:
for kwarg in kwargs['ticks']:
ticks.append(kwarg)
elif "start" in kwargs:
for kwarg in kwargs['start']:
start.append(kwarg)
print('Ticks: {}'.format(ticks))
print('Start: {}'.format(start))
但是如果您只是将所有内容都附加到字典中,则可能完全不使用循环,而直接使用字典中的值即可。
def fn1(**kwargs):
print('Ticks: {}'.format(kwargs.get('ticks', [])))
print('Start: {}'.format(kwargs.get('start', [])))
[请记住,在您提供的示例结果中,start
是一个列表,但是您提供的是字符串。如果希望start
作为列表,则应提供start=['2']
。