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

时间:2013-05-10 10:41:52

标签: python string function input

import sys

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

fun()
fun( a=5 )
fun( sys.argv[1:] )

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

打电话给我的节目
python my_program.py a=5 b=6

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

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

2 个答案:

答案 0 :(得分:4)

使用**进行kwarg解包:

d = {}
for a in sys.argv[1:]:
    k, v = a.split('=')
    d[k] = int(v)
func(**d)

另一种方法,使用csv模块:

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

正如@MartijnPieters所说,您可以使用argparse模块

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()))

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

答案 1 :(得分:4)

使用*将列表解压缩到参数中:

fun(*sys.argv[1:])

请注意,这将导致 string 参数; sys.argv命令行条目始终是字符串。

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

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

此处的附加优势是您可以获得正确的帮助反馈,遵循标准命令行约定:

$ 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