打印Python3列表元素的内容,而不是值

打印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设置了变量。我有一

我在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设置了变量。我有一个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)