美文网首页
函数的参数问题

函数的参数问题

作者: 堪怜咏絮才 | 来源:发表于2020-03-21 15:01 被阅读0次
'''
位置参数:
    位置形参:函数定义时,从左往右写的参数
    位置实参:函数调用时,从左往右写的参数
'''


def func(a, b):
    print(a, b)


func(1, 2)
# 1, 2
'''
关键参数:
  正常情况下,给函数传参数,要按顺序。如果不想按顺序,就用关键参数。
  指定参数名的参数,就叫做关键参数。
  函数调用时:func(a=1, b=2),  这种指定了参数名的参数,就是关键参数。
  调用函数时,关键参数可以和位置参数一起用,但是关键参数必须在位置参数的后面。不然会报错。

利用关键字传参的是时候,要么全部参数都用关键字传参,要么就必须按照顺序
'''


def func1(a, b, c):
    print(a, b, c)


func1(10, 20, c=30)
# 10, 20, 30

'''
默认参数:
  函数定义时,默认参数必须在位置形参的后面。
  函数调用时,指定参数名的参数,叫关键参数。
  而在函数定义时,给参数名指定值的时候,这个参数叫做默认参数。
  关键参数,和默认参数两个参数写法一样,区别在于:
    关键参数是在函数调用时,指定实参的参数名,也可以说指定值的参数名。
    默认参数是在函数定义时,指定参数名的值。
'''


def func2(a, b, c=30):
    print(a, b, c)


func2(10, 20, 40)
# 10, 20, 40

'''
动态参数:*args  **kwargs
  *args
  针对函数定义时的*:
    def func(a, b, *args):
      pass
    *args会接收函数调用时,传入的多余的位置实参。
    *args 是一个元组

    *kwargs
    针对函数定义时,站在形参的角度看 **
    接收多余的关键实参,成为一个字典dict。
    字典的key是关键实参的变量名,字典的value是关键实参的值。
    将字典交给**后面的变量名,这里是kwargs
'''


def func3(a, b, *args):
    print(a, b, args)


func3(10, 20, 30, 40)
# 10, 20, (30, 40)

'''
函数定义时:
    从左往右:位置形参 > *args > 默认参数 > **kwargs
    位置形参 > 默认参数 > *args > **kwargs  也可以。
    因为函数调用时给的实参满足了位置形参、默认参数之后,会把多余的位置实参给args。这样并不会报错。
    但是 **kwargs 必须在 *args后面
    默认形参必须在位置形参后面

函数调用时:
    从左往右:位置实参 > *args > 关键参数 > **kwargs
    因为 *args 在函数调用时,会被打散成位置实参,而关键参数必须在位置实参的后面,否则会报错。SyntaxError: positional argument follows keyword argument
    *args 必须在 **kwargs后面, 否则会报语法错误:SyntaxError: iterable argument unpacking follows keyword argument unpacking

注意:用了*之后,*后面的参数必须以关键字传参,并且用了*之后,不能再接收不定个数的位置参数。
'''


def func4(a, b, c=10, *args, **kwargs):
    print(a, b, c, args, kwargs)


func4(10, 20, 30, e=100)
# 10,20,30,(),{'e':100}


def func5(a, b, *args, c=30, **kwargs):
    print(a, b, c,  args, kwargs)


func5(10, 20, 30, e=100)
# 10,20,30,(30,),{'e':100}


def func6(a, b, *, c=10, d=30, **kwargs):
    print(a, b, c, d, kwargs)


func6(10, 20)
# 10,20,10,30,{}

相关文章

  • 函数的参数问题

  • python学习-函数

    1、函数定义 函数文档 2、参数问题 参数写法错误,函数参数需要的是变量,不能用“元组”等的形式来传递 修改

  • python 装饰器示例

    没有参数 一个参数 两个参数 三个参数 问题:可以装饰具有处理n个参数的函数的装饰器? 问题:一个函数可以被多个装...

  • C语言-计算数值积分(函数指针作为函数参数示例)

    问题描述:计算数值积分(函数指针作为函数参数示例) 源代码: 运行结果: 程序参数:

  • 函数

    函数定义 函数调用 传入的参数比定义的少也没有问题: abs(); // 返回NaN此时abs(x)函数的参数x将...

  • javascript入门4(0801)

    1.函数的参数的个数问题 /* 函数参数的个数问题: 1、当给出形参,但却没有传入实参,则值为undefined ...

  • es6学习笔记整理(六)函数扩展

    参数默认值 如果函数参数中没有默认值,并且调用的时候也没有赋值,这种写法是错的函数参数默认值作用域的问题 函数外面...

  • javascript函数

    函数 1.JavaScript允许传入任意个参数而不影响调用,因此传入的参数比定义的参数多也没有问题,虽然函数内部...

  • 关于JS函数的参数小结

    参数分实参和虚参,定义函数时的参数叫虚参,调用函数时候传入参数的叫实参本文主要小结一下平时编写代码时候遇到参数问题...

  • 032|匿名函数&函数剩余参数

    函数剩余参数 上一节中,有提到函数剩余参数也能解决不定参数问题。这一节我们就来学习一下剩余参数。 剩余参数(res...

网友评论

      本文标题:函数的参数问题

      本文链接:https://www.haomeiwen.com/subject/mqwyyhtx.html