Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要一个例子来更好地理解python中的kwargs吗_Python - Fatal编程技术网

需要一个例子来更好地理解python中的kwargs吗

需要一个例子来更好地理解python中的kwargs吗,python,Python,我继续查看了其他线程中的一些示例。我觉得我仍然误解了口译员是如何准确地处理**夸尔格的。我已经了解了*args的基本知识,我对**kwargs的工作原理非常有信心。我只是想确定它是具体的 所以在我这里的代码示例中,我需要理解为什么我们使用**kwargs而不仅仅是使用kwargs?如果我理解正确的话,“*”或“通配符”允许我们有一个占位符,可以用任何字符串或指定值替换(我假设有一些限制)。这让我很困惑,因为在学习基础知识的同时,我已经创建了我的示例,但它并不需要这种**kwarg位置参数,或者至

我继续查看了其他线程中的一些示例。我觉得我仍然误解了口译员是如何准确地处理**夸尔格的。我已经了解了*args的基本知识,我对**kwargs的工作原理非常有信心。我只是想确定它是具体的

所以在我这里的代码示例中,我需要理解为什么我们使用**kwargs而不仅仅是使用kwargs?如果我理解正确的话,“*”或“通配符”允许我们有一个占位符,可以用任何字符串或指定值替换(我假设有一些限制)。这让我很困惑,因为在学习基础知识的同时,我已经创建了我的示例,但它并不需要这种**kwarg位置参数,或者至少我所理解的那样。我不想继续摆弄它,直到我更了解它,只是当我这么做的时候,它似乎变得更加混乱,所以我通常回去读更多。我知道,通配符被假定为处理数量不确定的参数,这样你就可以通过一个函数发送未知大小的列表和字典,这个函数可以被调用,不管你放了多少个参数

所以我想,我的问题是。这是**kwargs的正确用法吗。有没有人有更好的方法来解释和理解它的语法和实现。感谢你们让这个地方继续发展,并提供了一个很棒的社区。我将继续阅读,同时等待一些回应

kwargs = {"kwarg1": 1, "kwarg2": 2, "kwarg3": 3}
def some_func(*args, **kwargs):
    print("*Args:", *args)
 
some_func("AnArg1", "AnArg2", "AnArg3", kwargs)
我一直在摆弄更多的东西,这些就是我提出并阅读的例子

def greet_me(**kwargs):
    for key, value in kwargs.items():
        print("{0} = {1}".format(key, value))
 
 
def test_args_kwargs(arg1, arg2, arg3):
    print("arg1:", arg1)
    print("arg2:", arg2)
    print("arg3:", arg3)
 
args = ("two", 3, 5)
test_args_kwargs(*args)
 
kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
test_args_kwargs(**kwargs)
 
kwargs = {"kwarg1": 1, "kwarg2": 2, "kwarg3": 3}
def some_func(*args, **kwargs):
    print("*Args:", *args)
  
some_func("AnArg1", "AnArg2", "AnArg3", kwargs)
输出:

arg1:两个

arg2:3

arg3:5

arg1:5

arg2:两个

arg3:3

*Args:AnArg1 AnArg2 AnArg3{'kwarg1':1,'kwarg2':2,'kwarg3':3}

其中输出输出最后一串args和kwargs。我想把它们分成两行。我还想确保我正确使用**kwargs。如果有关于做什么和不做什么的建议,我一定会接受

输出

arg1:两个

arg2:3

arg3:5

arg1:5

arg2:两个

arg3:3

*Args:AnArg1 AnArg2 AnArg3

**KWArgsg:{'kwarg1':1'kwarg2':2'kwarg3':3}

输出:

('this','is'){'a':'a','test':'test'}

('this','is'){'a':'a','test':'test'}

所以args是元组,kvargs是字典

*(1、2、3)从元组中提取值,并将其作为单独的项而不是集合提供。这叫做“拆包”。虽然返回的内容不太明显,但您也可以打开词典

您不必了解kvargs如何使用它。即使kvargs是一本词典,也不应该将其视为一本词典。要从*args和**kvargs中提取值,请为函数指定参数:

def leftovers(*args, **kvargs):
    print(args, kvargs)
 
def filter(a, *args, b='thing', **kvargs):
    leftovers(*args, **kvargs)
 
filter(1, 2, b=3, c=4)
输出:

(2,){'c':4}

函数“filter”使用第一个position参数和“b”关键字参数。剩下的参数可以传递给“leftovers”函数。这比:

def leftovers(*args, **kvargs):
    print(args, kvargs)
 
def filter(*args, **kvargs):
    a = args[0]
    b = kvargs['b']
    del kvargs['b']
    leftovers(args[1:], **kvargs)
 
filter(1, 2, b=3, c=4)
def leftovers(*args, **kvargs):
    print(args, kvargs)
 
def filter(*args, **kvargs):
    a = args[0]
    b = kvargs['b']
    del kvargs['b']
    leftovers(args[1:], **kvargs)
 
filter(1, 2, b=3, c=4)