定义一个带有动态参数的函数,来自用户的关键字参数并打印它们
Define a function with dynamic arguments, keyword arguments from user and print them
代码:
def myFun(*args, **kwargs):
print("args: ", args)
print("kwargs: ", kwargs)
args = input("Enter args: ")
kwargs = input("Enter kwargs: ")
myFun(args,kwargs)
输出:
Enter args: 1,2,3,4
Enter kwargs: a=5,b=6,c=7
args: ('1,2,3,4', 'a=5,b=6,c=7')
kwargs: {}
Process finished with exit code 0
这里的预期输出是:
args: (1,2,3,4)
kwargs: {'a':5,'b':6,'c':7}
我得到的输出不是预期的输出。
所以这里有几件事要注意,你的 args 是作为字符串出现的,因为它们是作为字符串传递的。 kwargs
和 args
是变量名,但 *args
和 **kwargs
不是。所以你想做的可能是这样的:
def parseArgs(inputString):
return(inputString.split(','))
def parseKWargs(inputString):
d = {}
for element in parseArgs(inputString):
current = element.split('=')
d[current[0]] = current[1]
return(d)
def myFun(*args, **kwargs):
print("args: ", args)
print("kwargs: ", kwargs)
args = parseArgs(input("Enter args: "))
kwargs = parseKWargs(input("Enter kwargs: "))
myFun(*args, **kwargs)
kwargs 需要是一本字典并且“通过引用传递”我相信这是正确的表达方式。希望这有帮助。
感谢 wjandrea 的好收获
您可以使用列表和字典理解将要列表的用户 input
解析为 args,将字典解析为 kwargs,然后将它们解压缩到 myFun
.
def myFun(*args, **kwargs):
print("args: ", args)
print("kwargs: ", kwargs)
args = [int(i) if i.isdigit() else i for i in input("Enter args: ").split(",")]
kwargs = {i.strip().split("=")[0]: int(i.strip().split("=")[1]) if i.strip().split("=")[1].isdigit() else i.strip().split("=")[1] for i in input("Enter kwargs: ").split(",")}
myFun(*args, **kwargs)
进入
Enter args: 1,2,3,4
Enter kwargs: a=5,b=6,c=7
输出
args: (1, 2, 3, 4)
kwargs: {'a': 5, 'b': 6, 'c': 7}
代码:
def myFun(*args, **kwargs):
print("args: ", args)
print("kwargs: ", kwargs)
args = input("Enter args: ")
kwargs = input("Enter kwargs: ")
myFun(args,kwargs)
输出:
Enter args: 1,2,3,4
Enter kwargs: a=5,b=6,c=7
args: ('1,2,3,4', 'a=5,b=6,c=7')
kwargs: {}
Process finished with exit code 0
这里的预期输出是:
args: (1,2,3,4)
kwargs: {'a':5,'b':6,'c':7}
我得到的输出不是预期的输出。
所以这里有几件事要注意,你的 args 是作为字符串出现的,因为它们是作为字符串传递的。 kwargs
和 args
是变量名,但 *args
和 **kwargs
不是。所以你想做的可能是这样的:
def parseArgs(inputString):
return(inputString.split(','))
def parseKWargs(inputString):
d = {}
for element in parseArgs(inputString):
current = element.split('=')
d[current[0]] = current[1]
return(d)
def myFun(*args, **kwargs):
print("args: ", args)
print("kwargs: ", kwargs)
args = parseArgs(input("Enter args: "))
kwargs = parseKWargs(input("Enter kwargs: "))
myFun(*args, **kwargs)
kwargs 需要是一本字典并且“通过引用传递”我相信这是正确的表达方式。希望这有帮助。
感谢 wjandrea 的好收获
您可以使用列表和字典理解将要列表的用户 input
解析为 args,将字典解析为 kwargs,然后将它们解压缩到 myFun
.
def myFun(*args, **kwargs):
print("args: ", args)
print("kwargs: ", kwargs)
args = [int(i) if i.isdigit() else i for i in input("Enter args: ").split(",")]
kwargs = {i.strip().split("=")[0]: int(i.strip().split("=")[1]) if i.strip().split("=")[1].isdigit() else i.strip().split("=")[1] for i in input("Enter kwargs: ").split(",")}
myFun(*args, **kwargs)
进入
Enter args: 1,2,3,4
Enter kwargs: a=5,b=6,c=7
输出
args: (1, 2, 3, 4)
kwargs: {'a': 5, 'b': 6, 'c': 7}