打印Python3列表元素的内容,而不是值
我在Python3中有一个列表,其中包含两个变量,其中包含通过argparse设置的值:打印Python3列表元素的内容,而不是值,python,python-3.x,Python,Python 3.x,我在Python3中有一个列表,其中包含两个变量,其中包含通过argparse设置的值: start = set by user cli argument end = set by user cli argument arguments=[start,end] print (arguments[0]) print (arguments[1]) 这目前只是给出用户通过命令行设置的start和end的整数值,但我还想打印变量名。我该怎么做?最后,我尝试检查用户是否通过cli设置了变量。我有一
start = set by user cli argument
end = set by user cli argument
arguments=[start,end]
print (arguments[0])
print (arguments[1])
这目前只是给出用户通过命令行设置的start和end的整数值,但我还想打印变量名。我该怎么做?最后,我尝试检查用户是否通过cli设置了变量。我有一个for循环来迭代用户可能设置的所有可用参数
arguments=[start,end]
print (arguments[0]) //This (test) returns the integer the user set
print (arguments[1]) //This (test) returns the integer the user set
for x in arguments:
if results.arguments[x] is not None: //results.start and results.end are the variables coming from argparse
print ('User has set argument values via the CLI... Do something here.') //This is where I would actually use the integer value of arguments[x], but above in the if statement, I need the variable string from the array element.
else:
print ('User did not specify any arguments via the CLI. Pull the values from the config file.')
**范例**
user@taco# python3 program.py -s 100 -e 1000
用户运行程序并指定起始值100和结束值1000
parser = argparse.ArgumentParser(description='Taco help menu', add_help=True)
parser.add_argument('-s', '--start', dest='start', action='store', help='enter the starting <value>', metavar='<value>')
parser.add_argument('-e', '--end', dest='end', action='store', help='enter the ending <value>', metavar='<value>')
results = parser.parse_args()
arguments=[start,end]
现在我们需要检查用户是否设置了参数。为此,让我们检查results.start和results.end是否设置为None。我们需要一个for循环来遍历所有可能的参数。目前只有两个(开始和结束),但谁知道,以后可能会有更多
for x in arguments:
if results.arguments[x] is not None:
print ('User has set argument values via the CLI... Do something here.') //This is where I would actually use the integer value of arguments[x], but above in the if statement, I need the variable string from the array element.
else:
print ('User did not specify any arguments via the CLI. Pull the values from the config file.')
*更新*
好的,我取得了一些进步,并且混淆了一些事情。我想我已经把它缩小到了一个单一的问题,现在是不同的问题。使用for循环迭代变量获取数组元素。请参阅下面的完整代码和当前错误消息。注意!!!如果我删除for循环并手动指定元素编号,那么一切都会正常工作
parser = argparse.ArgumentParser(description='Taco help menu', add_help=True)
parser.add_argument('-s', '--start', dest='start', action='store', help='enter the starting <value>', metavar='<value>')
parser.add_argument('-e', '--end', dest='end', action='store', help='enter the ending <value>', metavar='<value>')
results = parser.parse_args()
arguments=[results.start,results.end]
print (arguments[0])
print (arguments[1])
print (results.start)
print (results.end)
for x in arguments:
if arguments[x] is not None: // <-- This line seems to be the issue now. arguments[x] not working.
print ('CLI set')
else:
print ('Default config')
现在,当您通过CLI设置参数时,它会将该值优先于配置文件中的值。在python中,如果用户在输入()中未输入任何内容,我认为您必须使用CLI输入,则其中存储的默认值为“”。 因此,我只建议检查变量是否未设置为None类型或空字符串,可以这样做
if start:
#logic here
希望这能有所帮助:)您正在尝试使用值而不是键访问列表,这在极少数情况下可能有效。因为for是for-each循环,所以您已经在遍历列表中的项目了 这是错误的,x不是指键,而是指项本身,如果您尝试编写“常规”for循环,则需要遍历列表的长度,而不是项来获取每个键,就像在任何其他语言中一样:
Wrong:
for x in arguments:
if arguments[x] is not None:
foreach
for x in arguments:
if x:
# Do stuff
else:
# Do other stuff
像这样的方法可能更容易
import argparse
def import_config():
return {
"start": 10,
"end": 100
}
def do_stuff(start, end):
print(start, end)
if __name__=="__main__":
config = import_config()
parser = argparse.ArgumentParser()
parser.add_argument("-s", type=int, dest="start", default=config["start"])
parser.add_argument("-e", type=int, dest="end", default=config["end"])
args = parser.parse_args()
do_stuff(args.start, args.end)
“打印变量名”是什么意思?你能给出一个包含简单的
argparse
code和一个示例命令行,以及你想为该命令行输出什么吗?arguments[x]返回该数组中的整数值,例如start=100。我还需要数组中存储的实际字符串,即“start”,以便在上面的if语句中使用,以检查是否设置了从argparse传递的参数。查看上面的我的更新。什么字符串?如果arguments[0]
是0,而arguments[1]
是其他数字,那么arguments
中的哪个字符串有效?同时,您的编辑并没有使这一点变得更清楚,仍然没有提供我要求的任何内容,仍然不接近a,仍然不可回答。您是否希望用户可以按名称设置任意参数?如果他们只是输入数字(比如100)作为参数,那么除了您选择将其保存到的内容之外,他们没有任何与之相关联的字符串/变量名。同时,请不要将您的问题组织为“更新”部分的长字符串。如果任何人出于某种原因想查看问题的历史记录,他们可以单击“2分钟前编辑的”按钮。对其他人来说,这个问题应该是一个易于理解和回答的形式。为什么有人投票支持这个?这几乎完全是胡说八道。'
的类型是str
,而不是None
(它甚至不是一个类型),或者甚至是NoneType
。此外,OP说他正在使用argparse
。这是一个用于解析命令行参数的库。这与input()
不同。对不起,我写的答案不是我的意思。。。我做了改变。:)
if start:
#logic here
Wrong:
for x in arguments:
if arguments[x] is not None:
foreach
for x in arguments:
if x:
# Do stuff
else:
# Do other stuff
import argparse
def import_config():
return {
"start": 10,
"end": 100
}
def do_stuff(start, end):
print(start, end)
if __name__=="__main__":
config = import_config()
parser = argparse.ArgumentParser()
parser.add_argument("-s", type=int, dest="start", default=config["start"])
parser.add_argument("-e", type=int, dest="end", default=config["end"])
args = parser.parse_args()
do_stuff(args.start, args.end)