Python:使用运行时输入更改函数中的键值

Python:使用运行时输入更改函数中的键值,python,string,function,input,Python,String,Function,Input,第一个fun()打印出'7,1',第二个打印出'5,1',但第三个打印出'['a=8','b=6']1]'。我希望能够与您一起调用我的程序 import sys def fun( a=7, b=1 ): print a, b fun() fun( a=5 ) fun( sys.argv[1:] ) 更改打印的a和b的值。但这不起作用,因为sys.argv[1]是一个字符串列表 有没有办法将字符串列表转换为函数可以理解的形式?对于kwarg解包,请使用**: python my_pr

第一个fun()打印出'7,1',第二个打印出'5,1',但第三个打印出'['a=8','b=6']1]'。我希望能够与您一起调用我的程序

import sys

def fun( a=7, b=1 ):
    print a, b

fun()
fun( a=5 )
fun( sys.argv[1:] )
更改打印的a和b的值。但这不起作用,因为sys.argv[1]是一个字符串列表


有没有办法将字符串列表转换为函数可以理解的形式?

对于kwarg解包,请使用
**

python my_program.py a=5 b=6
另一种方法是使用
csv
模块:

d = {}
for a in sys.argv[1:]:
    k, v = a.split('=')
    d[k] = int(v)
func(**d)
正如@MartijnPieters所指出的,您可以使用
argparse
模块

import csv
func(**{k: int(v) for k, v in csv.reader(sys.argv[1:], delimiter='=')})

但是,您必须调整输入参数的方式

使用
*
将列表解压为参数:

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('-a', type=int)
parser.add_argument('-b', type=int)

args = parser.parse_args()
fun(**dict(args._get_kwargs()))
请注意,这将导致字符串参数
sys.argv
命令行条目始终是字符串

您可能需要查看以处理命令行参数,包括自动转换:

fun(*sys.argv[1:])
然后使用:

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('-a', type=int, default=7)
parser.add_argument('-b', type=int, default=1)
args = parser.parse_args()

func(args.a, args.b)
这里的附加优势是,您可以获得适当的帮助反馈,并且遵循标准的命令行约定:

$ python my_program.py -a=5 -b=6

哦,该死的,5秒difference@Haidro看看接下来会发生什么。我打赌最重要的答案是Martijn的答案现在打印出的是“a=5,b=6”,而不是“5,6”。它本质上是设置a='a=5',b='b=6'。有没有办法让函数把它们当作关键字?
$ python my_program.py --help
usage: [-h] [-a A] [-b B]

Process some integers.

optional arguments:
  -h, --help  show this help message and exit
  -a A
  -b B