美文网首页
廖雪峰 | 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 函数的参数及函数的调用

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

  • Python:3.函数

    调用函数 定义函数 函数的参数 递归函数 参考 廖雪峰的Python教程

  • 箭头函数

    廖雪峰-箭头函数 箭头函数 基础语法: (参数1, 参数2, …, 参数N) => { 函数声明 }//相当于:(...

  • JavaScript学习笔记(三)

    主要源于廖雪峰老师的JavaScript教程 1. 高阶函数 参数传入函数 JavaScript的函数其实都指向某...

  • Kotlin将函数作为参数传递的实现

    无参数函数的传递及调用 有参数函数传递

  • 函数的参数

    廖雪峰Python教程 一、必选参数 二 、默认参数 函数定义 参数类型说明 name, 必选参数gende...

  • Python - Day6

    廖雪峰 1.关键字参数 ①可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装成一个tuple;而...

  • JavaScript学习笔记(二)

    主要源于廖雪峰老师的JavaScript教程 1. 函数 函数的定义和调用 函数声明 函数也是一个对象,可以用一个...

  • python学习4

    学廖雪峰老师的python教程笔记。 1、递归函数 函数内部调用该函数本身,比循环逻辑简单 注意防止栈溢出 尾递归...

  • python进阶函数

    文章里的内容出自阅读廖雪峰的python教程总结而得 变量可以指向函数 函数名也可以指向变量 函数作为参数 内建函...

网友评论

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

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