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

时间:2016-10-07 23:39:40

标签: python python-2.7 python-3.x

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

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

我的怀疑:

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

  • 位置,关键字,可选和必需之间的差异 参数

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

  • *args**kargs如何存储值?我知道*args和。{ **kargs有效,但它们如何存储价值? *args是否存储值 字典中的元组和**kargs

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

提前致谢

2 个答案:

答案 0 :(得分:2)

默认值

让我们设想一个函数,

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

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

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

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

例如:

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

function(1)

,输出将变为:

1
10
5

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

可变长度参数列表

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

答案 1 :(得分:0)

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

有关详细信息,请参阅教程:

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