美文网首页
廖雪峰 | 3.1 函数的参数及函数的调用

廖雪峰 | 3.1 函数的参数及函数的调用

作者: 苦哈哈的柠檬水 | 来源:发表于2022-04-13 21:07 被阅读0次

    函数的参数

    位置参数与关键词参数、强制关键词参数、默认参数、可变位置参数、可变关键词参数、强制位置参数以及综合混搭参数

    #小测试
    def f(a, b, /, c, d, *, e, f, **kw):
        print(a, b, c, d, e, f)
    def f(a, b, c, *args, **kw):
        print(a, b, c, d, args, kw)
    

    1 位置参数与关键词参数

    def calc(a, b, c):
        print(a*a + 2*b + c)
    calc(3, 5, 8) #位置参数
    calc(c=8. b=5, a=3)#关键词参数
    

    位置和关键词参数混搭:先位置,后关键词(!顺序不可改变)

    calc(3, 5, c=8)
    

    2 强制关键词参数

    *之后,强制关键词参数

    def c2(*, a, b, c):
        print(a*a + 2*b + c)
    c2(a=3, b=5, c=8)#a,b,c为强制关键词参数
    def c21(d, *, a, b, c):
        print(a*a + 2*b + c)
    c21(6, a=3, b=5, c=8)#d为位置参数,a,b,c为强制关键词参数
    

    3 默认参数

    默认参数必须在非默认参数之后:先非默认参数,再默认参数

    def c3(a, b, c=8):
        print(a*a + 2*b + c)
    c3(3, 5, 9)
    

    4 可变参数(位置)

    (1)*args表示可传入多个位置参数;公式中设置*args可以破元组
    (2)混搭:先不可变位置参数,后可变位置参数

    >>> def hello(msg, *names):
    ...     print('hello', names, msg)
    ...
    >>> hello('新年好', 'Bob', 'Lily')
    hello ('Bob', 'Lily') 新年好
    
    >>> def hello(msg, *names):
    ...     print('hello', *names, msg)#*names表示破元组
    ...
    >>> hello('新年好', 'Bob', 'Lily')
    hello Bob Lily 新年好
    

    5 可变参数(关键词)

    (1)**kw表示可传入多个关键词参数;公式中设置*kw可以破字典,仅保留key
    (2)混搭:先位置参数,后可变关键词参数

    >>> def hello2(msg, **names):
    ...     print('老大是:', names['BOSS'], msg)
    ...     print('老大是:', names['BOSS1'], msg)
    ...
    >>> hello2('新年好', BOSS='Bob', BOSS1='Lily', Guard='Alexia')
    老大是: Bob 新年好
    老大是: Lily 新年好
    

    6 综合混搭参数

    顺序:必选参数,默认参数,可变位置参数,命名关键字参数和可变关键词参数
    (默认参数可以放在可变参数或命名关键词参数前面么?)

    >>> def f(a, b, c, d, *args, e, f, **kw):
    ...     print(a, b, c, d, e, f)
    ...     print(args)
    ...     print(kw)
    ...
    >>> f(1, 2, 3, 4, 5, 6, 99, e=7, f=8, x=9, y=10, z=11)
    1 2 3 4 7 8
    (5, 6, 99)
    {'x': 9, 'y': 10, 'z': 11}
    

    7 强制位置参数

    (1)/前元素为强制位置参数,不可加关键词

    >>> def f(a, b, /, c, d, *, e, f, **kw):
    ...     print(a, b, c, d, e, f)
    ...     print(kw)
    ...
    >>> f(1, 2, 3, 4, e=5, f=6, x=9, y=10, z=11)
    1 2 3 4 5 6
    {'x': 9, 'y': 10, 'z': 11}
    

    函数的调用

    1 开包列表和元组

    *:开包符,列表和元组均可

    >>> def hello(msg, name1, name2, name3):
    ...     print('hello', name1, name2, name3, msg)
    ...
    >>> names = ['Bob', 'Lily', 'Alexia']
    >>> hello('新年好', *names)
    hello Bob Lily Alexia 新年好
    
    >>> def hello(msg, *names):
    ...     print('hello', names, msg)
    ...
    >>> names_param = ['Bob', 'Lily', 'Alexia']
    >>> hello('新年好', names_param)
    hello (['Bob', 'Lily', 'Alexia'],) 新年好
    >>> hello('新年好', *names_param)
    hello ('Bob', 'Lily', 'Alexia') 新年好
    
    >>> def hello(msg, *names):
    ...     print('hello', *names, msg)
    ...
    >>> names_param = ['Bob', 'Lily', 'Alexia']
    >>> hello('新年好', *names_param)
    hello Bob Lily Alexia 新年好
    >>> hello('新年好', names_param)
    hello ['Bob', 'Lily', 'Alexia'] 新年好
    

    2 开包字典

    **用于字典的开包符

    >>> def hello(msg, **names):
    ...     print('老大是:', names['BOSS'], msg)
    ...     print('老大是:', names['BOSS1'], msg)
    ...
    >>> data = {'BOSS': 'Bob', 'BOSS1': 'Lily', 'Guard': 'Alexia'}
    >>> hello('新年好', **data)
    老大是: Bob 新年好
    老大是: Lily 新年好
    

    相关文章

      网友评论

          本文标题:廖雪峰 | 3.1 函数的参数及函数的调用

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