函数
1、函数简介
简而言之,函数就是将一些语句集中方在一起的部件,它能够不止一次的在程序中运行。函数还能够计算出一个返回值,并能够改变作为函数输入的参数,而这些参数在代码运行时也许每次都不相同。以函数的形式去编写一个操作可以使它成为一个能够广泛应用的工具,让我们在不同的情形下都能够使用它。
更具体地说,函数是在编程过程中剪剪贴贴的替代——我们不再有一个操作的代码的多个冗余副本,而是将代码包含到一个单独的函数中。通过这样做,我们可以大大减少今后的工作:如果这个操作之后必须要修改,我们只需要修改其中的一份拷贝,而不是所有代码。
2、为什么要使用函数
1. 最大化实现代码重用和最小化实现代码冗余
函数允许整合通用化代码, 以便这些代码能够多次使用。因为它们允许一处编写多处运行,Python 函数是这个语言中最基本的组成工具——它让我们在程序中减少代码的冗余成为现实, 并为代码的维护节省了不少的力气。
2. 程序执行流程的分解
函数可以将一个程序分割定义为不同部分的工具。举个栗子:去做一份比萨,开始需要混合面粉,将面粉搅拌匀,增加顶部原料和烤等。如果你是在编写一个制作比萨的机器人的程序, 函数将会将整个 "做比萨" 这个任务分割成为独立的函数来完成整个流程中的每个子任务。独立的实现较小的任务要比一次完成整个流程要容易得多。一般来说,函数讲的是流程: 告诉你怎样去做某事,而不是让你使用它去做的事。
2、函数的定义
函数定义格式:
- def 函数名 (形参) : '''注释''' 函数体
- return 返回值
3、函数的使用
先定义,再调用
4、函数参数分类
函数参数可分为形参和实参。
1. 实参:
位置实参:和形参位置对应赋值
关键字实参:指的是按照形参名称一一赋值
2. 形参:必须被传值,是必备参数。形参有分为位置形参、默认形参和可变长形参
位置形参:如果在定义时不赋值,在调用的时候必须赋值。
举例:
- def foo(name, age) : print(name, end = '\t') print(age) # 位置实参 foo("xuan", 18)
默认形参:如果在定义时赋值又称为默认形参,在调用的时候可以不必在赋值,有可称为缺省形参。
举例:
- def foo(name, age, sex = "男") : print(name, age, sex) foo("xuan", 18)
可变长形参:实参个数多于形参,就必须使用可变长的形参,这也是可变长形参的作用。
实参溢出有两种情况:
位置实参溢出:
使用 * args 形参处理,存储成元组数值类型
举例:
- def foo(name, age, *agrs) : print(name, age, agrs) foo("xuan", 18, 19, 20)
关键字实参溢出:
使用 **kewargs 形参处理,存储成字典数值类型
举例:
- def foo(name, age, **kwagrs) : print(name, age, kwagrs) foo("xuan", 18, x = 19, y = 20)
命名关键字形参:在 * 后面定义的形参称为命名关键字形参,必须关键字实参的形式传值
举例:
- def foo( * args, x) : print(args, x) # foo(1, 2.3) # 报错提示没有为x传参 foo(1, 2, 3, x = 4) # 正确传参
常见问题小结:
问题 1:位置形参必须放到默认形参之前
- def foo(x, y = 1) print(x, y) foo(2)
问题 2:默认形参和外部变量赋值无关
- b = 1 def foo(y = b, x) print(x, y) b foo()
问题 3:默认形参的值为不可变数值类型
问题 4:语法规定位置实参必须在关键字实参的前面
- foo('xuan', sex = 'male', age = 18)
问题 5:一定不要对同一个形参多次赋值
- foo('xuan', sex = 'male', age = 18, namae = 'xuan1')
来源: http://www.bubuko.com/infodetail-2221597.html