Python 函数的传参

2022-05-18 14:10:20 浏览数 (1)

函数的传参

必传参数
  • 函数中定义的参数没有默认值,在调用函数时如果不传入则报错
  • 在定义函数的时候,参数后边没有等号与默认值
  • 错误:def add (a=1, b=1) x
    • 在定义函数的时候,没有默认值且必须在函数执行的时候传递进去的参数,且顺序与参数顺序相同,就是必传参数
默认参数(非必传参数)
  • 在定义函数的时候,定义的参数含有默认值,通过赋值语句给他设一个默认的值
  • 如果默认参数在调用函数的时候给予了新的值,函数将优先使用后传入的值进行工作
不确定参数-可变参数
  • 没有固定的参数名和数量(不知道要传的参数名具体是什么)
  • *args 代表 :将无参数的值合并成元组
  • **kwargs 代表将有参数与默认值的赋值语句合并成字典
参数规则
  • 参数的定义从左到右依次是
    1. 必传参数
    2. 默认参数
    3. 可变元组参数 ?
      • # 如果赋值的形式传参,则需要将可变的元组类型放在第一位
    4. 可变字典参数
  • 函数的参数传递非常灵活
  • 必传参数默认参数的传参多样化
  • 函数体内不可*
代码
代码语言:javascript复制
# coding:utf-8

def add(a, b, c=3):
    return a   b   c


result = add(1, 2)
print(result)

result = add(1, 2, 6)
print(result)


def test_args(*args, **kwargs):
    print(args, type(args))
    print(kwargs, type(args))


test_args(1, 2, 3, 4, 5, 6, 7, 8, 9, name='dewei', age=33, top=174)


def test_args_supre(*args, **kwargs):
    if len(args) >= 1:
        print(args[0])

    if 'name' in kwargs:
        print(kwargs['name'])
    else:
        print('no name')
    print(args, len(args))
    print(kwargs, len(kwargs))


test_args_supre(1, name='dewei')
a = ('python', 'django')
b = {'name': 'dewei'}
test_args_supre(*a, **b)


def add(a, b=1):
    print(a   b)


add(1, 2)
add(1)
add(a=1, b=2)
add(b=2, a=1)  # 仅限于当前形式
# add(b=2)  # 会报错


def test(a, b=1, *args):
    print(a, b, args)


s = (1, 2)
test(1, 2, *s)
# test(a=1, b=2, *s)  # 如果赋值的形式传参,则需要将可变的元组类型放在第一位


def test2(*args, a, b=1):
    print(a, b, args)


test2(a=1,b=2, *s)


def test3(a, b=1, **kwargs):
    print(a, b, kwargs)


test3(1, 2, name='dewei')
test3(a=1, b=2, name='dewei')
test3(name='dewei', age=33, a=1, b=2)

d = {'name': '小慕'}
test3(a=1, b=2, **d)
test3(**d, a=1, b=2)
test3(**d, a=1, b=2)
add

0 人点赞