函数的参数


01.函数调用时传入的参数须和定义的个数相匹配(可变参数除外),函数的参数可分为:

  • 位置参数,按照形参定义的顺序传入实参,比如:
def plus(x, y, z):
    return x+y+z;

result = plus(7, 14, 18)
print(result)
  • 关键字参数,使用形参的名字来传入实参,比如:
def plus(x, y, z):
    return x+y+z;

result = plus(x=7, z=10, y=14)
print(result)
  • 如果使用了关键字参数,那么实参的传递顺序可以和定义顺序不同。
  • 位置参数必须在关键字参数之前传入,位置参数是按位置对应的。
  • 默认参数,定义形参的时候赋予缺省值,如调用的时候没有传入实参,则使用缺省值,比如:
def plus(x, y=5, z=10):
    return x+y+z;

result = plus(7)
print(result)
  • 默认参数之后的形参必须也设置缺省值。
  • 默认参数的对应位置可以不传入实参。
  • 当函数被定义时,它的默认参数就被创建一次,而不是在每次调用的时候创建一次。


02.可变位置参数:

  • 可变位置参数可以匹配任意个参数,参数前加一个”*”星号表示可变位置参数,比如:
def add(x, *number):
    print(type(number))
    print(number)

add(3, 5, 7, 10)
  • 可变参数也是参数,必须符合位置参数,默认参数及调用时关键字参数的规则。
  • 可变参数会将传递的参数以元组的方式传递给函数中对应的形参。
  • 可变参数是贪婪模式,因此如果可变参数之后还有形参,则该形参必须使用关键字传参(keyword-only)。
  • 可变参数不允许使用关键字传参。
  • 可变参数的示例:
def add(*number):
    sum = 0
    for item in number:
        sum += item
    print("the sum is {}".format(sum))

add(5, 7, 10, 20)


03.可变关键字参数:

  • 可变关键字参数可以匹配任意个参数,参数前加两个”*”星号表示可变关键字参数,比如:
def info(**kwargs):
    print(type(kwargs))
    print(kwargs)

info(name='wenjun', age=30)
  • 可变关键字参数也是参数,必须符合位置参数,默认参数及调用时关键字参数的规则。
  • 可变关键字参数表示该形参可以接受多个命名参数,并以字典的形式传递给函数中对应的形参。
  • 可变关键字参数必须位于形参的最后位置。
  • 可变关键字参数示例:
def info(x, **kwargs):
    for key, value in kwargs.items():
        print("key is {} and value is {}".format(key, value))
    print(x)

info('hello world', name='wenjun', age=35)
  • 关键字参数也可通过**实参的方式传入,其值会赋予定义函数时同键名的形参,比如:
my_info = {"name": "wenjun", "age": "35"}

def info(name, age):
    print("my name is {} and my age is {}".format(name, age))

info(**my_info)


04.keword-only参数:

  • 在一个可变位置参数之后,出现的普通的参数,称为keyword-only参数。
keyword-only参数的示例:
def add(*args, final):
    sum = 0
    for item in args:
        sum += item
    result = sum + final
    print("the last result is {}".format(result))

add(1, 3, 5, 8, final=10)
  • keyword-only参数对应的位置必须要使用关键字传参;通常要为keyword-only参数定义缺省值。
文档更新时间: 2020-09-20 17:19   作者:闻骏