Python函数的参数

位置参数、默认值参数、可变参数、关键字参数和命名关键字参数

1 函数结构

def 函数名(参数):
    函数体
    返回值

2 位置参数

3 默认值参数

4 可变参数

# 可变长度参数函数
# 可变参数允许你传入0个或任意个参数,这些参数在调用时自动组装成元祖(tuple)

# 1 定义求和函数
def calc1(numbers):
    sum = 0
    # for循环遍历传递的列表或者元祖
    for num in numbers:
        sum = sum+num
    #返回求和结果
    return sum
# 调用calc1函数传递列表作为参数
print(calc1([1,2,3,4]))
# 调用calc1函数元祖作为参数
print(calc1((1,2,3,4,5)))
# 调用calc1函数集合作为参数
print(calc1({1,2,3,4,5,6}))

#2 定义求和函数
def calc2(*numbers):
    sum = 0
    # 接受到的参数全部自动组装成元祖
    print(type(numbers))
    # for循环遍历传递的列表或者元祖
    for num in numbers:
        sum = sum+num
    #返回求和结果
    return sum
# 调用calc2函数传递多个参数
print(calc2(1,1,1,1))
# 调用calc2函数传递列表作为参数,参数前加*
print(calc2(*[2,2,2,2]))
# 调用calc2函数元祖作为参数,参数前加*
print(calc2(*(1,2,3,4,5)))
# 调用calc2函数集合作为参数,参数前加*
print(calc2(*{1,2,3,4,5,6}))

5 关键字参数

# 关键词参数函数
# 更多信息必须以参数名=值得形式传递进去
def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
person("jack", 20)
person(name = "jack", age = 20)#效果同上
person("jason", 19, city="beijing")
# person("kiki",18,"上海") #报错 关键词参数函数必须要以 参数名=值 的形式传递参数

6 命名关键字

def person(name, age, *, city, job):
    print(name, age, city, job)
person("li", 22, city = "beijing",job="teacher")
# person("li", 22, city = "beijing") #参数少写报错

7 参数组合

# a b   位置参数
# c     默认值参数
# *args 可变参数
# **kw  关键字参数
def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

# a b   位置参数
# c     默认值参数
# d     命名关键字参数
# **kw  关键字参数
def f2(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

8 总结

可变参数

  • 定义 def 函数名(*arg)
  • 使用 函数名(值1,值2,值3)
  • 场景 需要传递参数,但是参数个数不确定
  • 其他 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。

关键词参数

  • 定义 def 函数名(**kw)
  • 使用 函数名(参数名1=值1, 参数名2=值2, 参数名3=值3)
  • 场景 可以扩展函数的功能,用户注册时,除了name和age用户还希望提交的其他信息都可以通过关键词参数提交
  • 其他 关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
  • 注意
  • 1 不写参数名报错
  • 2 参数传递必须以参数名=值得形式传递

命名关键词参数

  • 定义 def 函数名(*, 参数名1, 参数名2)
  • 使用 函数名(参数名1=值1, 参数名2=值2)
  • 场景 用户传递的其他信息受关键词约束
  • 注意
  • 1 不写参数名报错
  • 2 少写算错
  • 3 参数传递必须以参数名=值得形式传递