为了账号安全,请及时绑定邮箱和手机立即绑定

普通参数与关键字参数

普通参数与关键字参数

温温酱 2019-06-21 16:59:25
普通参数与关键字参数“关键字参数”与常规参数有什么不同?不能把所有的参数都作为name=value而不是使用位置语法?
查看完整描述

3 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

有两个相关的概念,都被称为“关键字参数”。

在调用端,也就是其他评论者所提到的,您可以通过名称指定一些函数参数。您必须在所有没有名称的参数(位置参数)之后提及它们,而且对于任何根本没有提到的参数,必须有默认值。

另一个概念是函数定义方面的:您可以定义一个函数,它按名称接受参数-您甚至不需要指定这些名称是什么。这些都是纯关键字参数,不能在位置上传递。语法是

def my_function(arg1, arg2, **kwargs)

传递给该函数的任何关键字参数都将被放入名为kwargs的字典中。您可以在运行时检查本词典的键,如下所示:

def my_function(**kwargs):
    print str(kwargs)my_function(a=12, b="abc"){'a': 12, 'b': 'abc'}


查看完整回答
反对 回复 2019-06-21
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

在最后一个语言特性中,区别是很重要的。考虑以下职能:

def foo(*positional, **keywords):
    print "Positional:", positional    print "Keywords:", keywords

这个*positional参数将存储传递给foo()没有限制你能提供多少。

>>> foo('one', 'two', 'three')Positional: ('one', 'two', 'three')Keywords: {}

这个**keywords参数将存储任何关键字参数:

>>> foo(a='one', b='two', c='three')Positional: ()Keywords: {'a': 'one', 'c': 'three', 'b': 'two'}

当然,您可以同时使用:

>>> foo('one','two',c='three',d='four')Positional: ('one', 'two')Keywords: {'c': 'three', 'd': 'four'}

这些特性很少被使用,但有时它们非常有用,重要的是要知道哪些参数是位置参数还是关键字。


查看完整回答
反对 回复 2019-06-21
?
当年话下

TA贡献1890条经验 获得超9个赞

使用关键字参数与普通参数是一样的,但顺序并不重要。例如,下面的两个函数调用是相同的:

def foo(bar, baz):
    passfoo(1, 2)foo(baz=2, bar=1)


查看完整回答
反对 回复 2019-06-21
  • 3 回答
  • 0 关注
  • 849 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信