关键字参数基本使用

关键字参数是指在传递实参的时候, 添加上函数定义时形参的名.

还有一种我们称之为位置参数, 我们前面的参数传递都是位置参数.(按照顺序传递参数.)

关键字参数我们以前其实用过:

在使用print()函数输出的时候, 我们为了不让后面默认添加换行符, 来自定义结束字符串的时候,就是使用的关键字参数.


print("你好", end="")
print("2你好", end="")


关键字参数的好处:

  1. 调用函数传递参数的时候, 不用考虑参数的顺序.

  2. 尤其对不需要给带有默认值的参数传递函数的时候尤其有用.


def foo(x=1, y=2, z=3):
    return x + y + z


print(foo(y=20))
print(foo(z=30))


关键字参数扩展

关键参数的另一个好处是可以随意扩展参数传递. 正常情况下, 我们传递的关键字参数如果形参已经存在了, 则会传递给指定的形参.

如果关键字参数没有对应的形参, 那么这些关键字参数会传递给形参中的最后一个参数:**kw(kw是形参名, 随意). **kw会把这些没人要的关键字参数作为字典的形式存储起来.

def foo(name, age, **kw):
    print(name)
    print(age)
    print(kw)


foo("李四", age=20, sex="男", country="中国")

注意:

  1. 注意把这里的关键字参数和可变参数区别开来. 关键字参数是2个**, 而可变参数是1个*

  2. 2个**的关键字参数必须是形参中的最后一个参数.

  3. 可变参数和关键字参数可以同时存在.


命名关键字参数

在前面使用关键字参数的时候, 关键字是不受限制的, 我们可以传递任意的关键字参数进去, 没有形参对应的关键字参数会存入到**kw中.

如果我们想限制关键字参数的名字, 可以使用命名关键字.

在位置参数的后面使用一个*作为分割, *好像一个形参, * 后面的参数就是命名关键字, 传递关键字参的时候必须与这里的关键字相对应.

def person(name, *, age, sex="男"):  # 这里的 age 和 sex 只能通过关键字参数赋值
    print(name, age, sex)


person("李四", age=20, sex="女")
person("李四", age=20)
person("李四", age=20, county="china")  # 无法传递 county 这样的关键字参数.

注意:

  1. 有了命名关键字参数, 仍然可以使用**kw, 则关键字又不会受到限制了.

  2. 如果前面有了可变参数, 则分隔符*可以省略了.

def person(name, *args, age, sex="男"):  # 这里的 age 和 sex 只能通过关键字参数赋值
    print(name, age, sex, args)


person("李四", age=20, sex="女")
person("李四", age=20)
person("李四", age=20, county="china")  # 无法传递 county 这样的关键字参数


Copyright © 李振超 2018 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-02-25 07:12:09

results matching ""

    No results matching ""