Positional ,关键字,可选和必需参数之间的区别?

mic*_*192 5 python python-2.7 python-3.x

我正在学习 python 中的函数,并找到了许多关于函数及其类型的很好的教程和答案,但我在某些地方感到困惑。我已阅读以下内容:

如果函数有"="那么它是一个关键字参数即(a,b=2) 如果函数没有"="那么它是位置参数即 (a,b)

我的疑问:

  • 必需参数和可选参数的含义是什么?默认参数也是关键字参数吗?(因为两者都包含“=”)

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

  • python官方文档说有两种类型的参数。如果是这样,那么是什么*args and **kargs(我知道它们是如何工作的,但不知道它们是什么)

  • 如何*args和**kargs存储值?我知道如何*args和 **kargs作品,但他们是如何存储值?是否*args将值存储在元组和**kargs字典中?

请深入解释。我想了解函数,因为我是新手:)

提前致谢

小智 5

默认值

让我们想象一个函数,

def function(a, b, c):
    print a
    print b
    print c
Run Code Online (Sandbox Code Playgroud)

位置参数以这种方式传递给函数。

function("position1", "position2", "position3")
Run Code Online (Sandbox Code Playgroud)

将打印

position1
position2
position3
Run Code Online (Sandbox Code Playgroud)

但是,您可以传入如下关键字参数,

function(c="1",a="2",b="3")
Run Code Online (Sandbox Code Playgroud)

输出将变为:

2
3
1
Run Code Online (Sandbox Code Playgroud)

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

b在 (a,b=2) 中是可选的原因是因为你给它一个默认值。

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

例如:

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

function(1)
Run Code Online (Sandbox Code Playgroud)

输出将变为:

1
10
5
Run Code Online (Sandbox Code Playgroud)

这是因为您没有为b或c提供参数,因此它们使用了默认值。从这个意义上说,b和c是可选的,因为如果您不明确给出它们,函数将不会失败。

可变长度参数列表

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

def function(*args)
    for argument in args:
        print argument
Run Code Online (Sandbox Code Playgroud)

可以这样调用:

function(1,2,3,4,5,6,7,8)
Run Code Online (Sandbox Code Playgroud)

所有这些参数都将存储在一个名为args的元组中。请记住,变量名 args 可以替换为任何变量名,所需的部分是星号。

然而,

def function(**args):
    keys = args.keys()
    for key in keys:
       if(key == 'somethingelse'):
           print args[key]
Run Code Online (Sandbox Code Playgroud)

期望像这样被调用:

function(key1=1,key2=2,key3=3,somethingelse=4,doesnt=5,matter=6)
Run Code Online (Sandbox Code Playgroud)

并且所有这些参数都将存储在一个名为args的字典中。请记住,变量名 args 可以替换为任何变量名,所需的部分是双星号。

通过这种方式,您需要以某种方式获取密钥:

keys = args.keys()
Run Code Online (Sandbox Code Playgroud)


Cha*_* S. 0

  • 可选参数是具有默认值的参数或通过 *args 和 **kwargs 传递的参数。
  • 任何参数都可以是关键字参数,这仅取决于它的调用方式。
  • 这些用于传递可变数量的参数或关键字参数
  • 是的,是的

有关更多信息,请参阅教程:

https://docs.python.org/2/tutorial/controlflow.html#more-on-defining-functions