位置参数、关键字参数、可选参数和必需参数之间的区别是什么?

6
我正在学习 Python 函数并找到了许多关于函数及其类型的好教程和答案,但在某些地方我感到困惑。我读过以下内容:
如果函数有“=”,那么它就是一个关键字参数,例如(a,b=2) 如果函数没有“=”,那么它就是位置参数,例如(a,b)
我的疑问:
1.必需参数和可选参数是什么意思?默认参数也是关键字参数吗(因为两者都包含“=”)?
2.位置参数、关键字参数、可选参数和必需参数之间有什么区别?
3.Python 官方文档说有两种类型的参数。如果是这样,那*args 和 **kargs 是什么(我知道它们如何工作,但不知道它们是什么)?
4.如何存储 *args 和 **kargs 的值?我知道 *args 和 **kargs 如何工作,但它们如何存储值?*args 是否将值存储在元组中,而 **kargs 在字典中?
请深入解释一下。我想了解有关函数的知识,因为我是新手 :)
谢谢您预先的帮助。

1
欢迎来到StackOverflow!很高兴看到你开始学习编程;如果你能提供你所学习的资源链接、你的假设以及你用于测试假设的示例代码,那么这个问题就可以得到改进。"请深入解释"更像是一个教程请求。为了让这个问题对其他人有用,你需要让它更广泛地适用于其他人提出的问题:请查看如何提出好问题的指南。 - emunsing
2个回答

8

默认值

让我们想象一个函数,

def function(a, b, c):
    print a
    print b
    print c

以这种方式将位置参数传递给函数。
function("position1", "position2", "position3")

将会打印

position1
position2
position3

然而,您可以像下面这样传入关键字参数:
function(c="1",a="2",b="3")

输出将变为:

2
3
1

现在输入不再基于参数的位置,而是基于关键字

(a, b=2)中b是可选的原因是因为你给它设置了默认值。

这意味着,如果你只提供一个参数,它将被应用于a。必须在函数定义中设置默认值。当从函数调用中省略参数时,该变量的默认值将被应用。通过这种方式,传递该变量变得“可选”。

例如:

def function(a, b=10, c=5):
    print a
    print b
    print c

function(1)

并且输出将变成:
1
10
5

这是因为你没有给出bc的参数,所以它们使用了默认值。从这个意义上说,bc是可选的,因为如果你没有明确给出它们,函数也不会失败。

可变长度参数列表

*args和**kwargs之间的区别在于像这样的函数:

def function(*args)
    for argument in args:
        print argument

可以这样调用:

function(1,2,3,4,5,6,7,8)

所有这些参数都将被存储在一个名为args的元组中。请注意,变量名args可以替换为任何变量名,必须使用星号(*)。
而,
def function(**args):
    keys = args.keys()
    for key in keys:
       if(key == 'somethingelse'):
           print args[key]

预期调用方式为:

function(key1=1,key2=2,key3=3,somethingelse=4,doesnt=5,matter=6)

所有这些参数会被存储在一个名为args的字典中。请注意,变量名args可以替换为任何变量名,必须使用双星号。

以这种方式,您需要以某种方式获取键:

keys = args.keys()

谢谢@IzPrEE,我喜欢你的解释,它帮助我澄清了一些疑惑,但我仍然有一些疑问,请帮忙解答:我理解默认参数和关键字参数,但是默认参数和关键字参数是相同的,所以它们具有类似的属性吗? 正如你所说的*kagrs是关键字参数,那么args就是位置参数吗?因为它不使用关键字。 - micro192

0

我理解默认参数和关键字参数,但是默认参数和关键字参数是相同的,所以它们具有类似的属性吗?正如你所说的*kagrs是关键字参数,那么args就是位置参数吗?因为它不使用关键字。 - micro192

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接