【python】详解python函数定义 def()与参数args、可变参数*args、关键参数**args使用实例

Python内置了很多函数,可以直接调用。Python内置的函数可以通过官方文档查看。也可以通过help()查看帮助信息。函数名是指向函数对象的引用,把函数名赋给变量,相当于给函数起了别名。

1. 定义函数

  • 使用def 函数名(参数):语句定义函数,在缩进块中编写函数体,返回值用return语句返回,如果没有return语句,返回值为None,等价于return None
  • 根据需要,return语句也可以返回多个值组成的tuple,可以不写括号(),多个值之间用逗号’,’隔开,调用函数时可以用多个变量接受返回值,多个变量按位置赋值
  • pass语句可以用做占位符,表示什么都不做,可用来定义一个空函数。在没想好具体语句的时候,可以用pass语句使代码先运行起来

2. 默认参数:用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)

  • 将变化小的参数作为默认参数,如果没有传入或改变默认参数的值,则使用默认参数。如果不需要改变默认参数,不用传入默认参数;需要改变默认参数时,传入默认参数即可
  • 必选参数在前,默认参数在后。有多个默认参数时,调用的时候,既可以按顺序提供默认参数,也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。表示该参数用传进去的值,其他默认参数继续使用默认值

实例:学生注册信息,设置姓名和性别为必选参数,设置年龄和城市为默认参数

  • 默认参数必须指向不变对象。因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。

由于列表是可变对象,为了固定默认参数的值,函数add_end()可做如下修改,用不可变对象None实现不改变默认参数的值:

3. 可变参数

  • 传入的参数个数可变,可以为0到任意个在参数前加*实现可变参数。 可变参数在函数调用时自动组装为一个tuple
  • 列表和元组前加*,可以将列表或元组中的元素变为可变参数传入函数。

4. 关键字参数

  • 将任意个含参数名的参数组装为一个dict。在参数前加**实现关键字参数
  • 在dict前加**,可以将dict作为为关键字参数传入函数。传入的为dict的拷贝,在函数中的修改不会影响函数外的dict。

实例:定义函数person()包含必选参数name和age,还包含关键字参数kw:

5. 命名关键字参数

  • 关键字参数可以传入任意多个名字,对名字没有限制。
    如果要限制关键字参数的名字,需要在参数列表中使用之后的关键字为命名关键字,只接受这些参数作为关键字名字。
  • 如果已经有可变参数,不需要特殊分隔符*

调用函数时,必须传入参数名,位置可以颠倒:

该函数只接受两个位置参数,如果调用时不用函数名person(‘Tom’, 18, ‘Tianjin’, ‘china’), Python解释器认为传入了四个位置参数,会报错:

如果命名关键字参数有缺省值,调用时可以不传入该参数

6. 组合参数

  • 不同类型的函数可以组合使用,参数定义的顺序必须为:必选【位置】参数,默认参数,英语拼写可变参数,命名关键字参数和关键字参数

定义变量:

输出:

func1中:
- d为可变参数,可以为空,d=3被认为是关键字参数;
- e为命名关键字参数,调用时必须使用名字调用;
- 用*t, *l, *dic调用时,*t, *l的前三个元素作为必选参数a, b, 默认参数c,后面的部分作为命名关键字e=10,剩下的部分作为可变参数构成tuple d=(6, 7, 8, 9), **dic作为关键字参数。

func2中:
- d, e均为命名关键字,必须使用名字调用。
- 因为不包含可变参数,如果要使用tuple, list调用,tuple和list的长度必须不超过固定参数加默认参数的长度,所以只能使用t1进行调用。

posted @ 2018-11-27 14:59  赵莉  阅读(1076)  评论(0编辑  收藏  举报
友情链接:回力鞋 | 中老年服装 | 新航道雅思 | 雅思培训机构 | SAT培训 | www.chat845.com