一、背景
在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
上面代码可以看出,整个发邮件的代码都是重复的,可以优化成以下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
优化后的代码无论是从可读性还是重用性上都要比之前的代码要好,这就是函数式编程和面相过程变成的区别:
- 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
- 面相对象:对函数进行分类和封装,让开发“更快更好更强”
函数式编程最重要的是增强代码的重用性和可读性。
二、函数的定义和使用
1 2 3 4 5 |
|
函数的定义主要有如下五点:
- def:函数的关键字,python解释器读到这里,知道是要定义函数了
- 函数名:函数的名称,日后通过函数名来调用函数
- 函数体:函数中进行一系列的逻辑计算,
- 参数:为函数体提供数据
- 返回值:当函数执行完毕后,可以给调用者返回数据。让调用者知道,函数是否执行成功。
1、返回值
返回值用来告知调用者函数是否执行成功
1 2 3 4 5 6 7 8 9 10 11 |
|
从上面的结果可以看出,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。
2、参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
以上例子可以看出,如果没有参数,无法自定义邮件内容,不灵活。带参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
a.普通参数(严格按照顺序,将实际参数赋值给形式参数)
1 2 3 4 5 6 |
|
b.指定参数
1 2 3 |
|
c.默认参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
默认参数必须放置在参数列表的最后,如果调用函数时不指定,则默认输出定义函数时定义的值。
d.动态参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
e.万能参数 (*args,**kwargs)
1 2 3 4 5 6 7 8 9 10 11 |
|
利用动态参数实现format功能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
函数中的异常处理(try语句)
1 2 3 4 5 6 7 8 9 10 11 |
|
该种异常处理语法的规则是:
· 执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。
· 如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。
· 如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。
· 如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。
· 如果没有发生异常,则执行else块代码。
三、函数内容补充
1 2 3 4 5 6 |
|
说明:函数传入参数的时候,传入的是引用。列表li传入a1后,a1引用的内存中li开辟的列表空间,因此当a1.append(999)时,列表li的值也是会变的。
1 2 3 4 5 6 7 8 |
|
在python解释器中,上段代码的执行顺序:
1、定义函数f1,指向内存中的一块儿空间(print(a1 + a2))
2、定义函数f1,指向内存中的另一块儿空间(print(a1 * a2))
3、执行f1(8,8)
因为此时函数f1指向的是后来定义的(print(a1 * a2)) ,故结果为64.
函数的全局变量:
局部变量:自己创建自己用
全局变量:所有的作用域里都能读
对全局变量进行【重新赋值】,需要global
特殊的:列表字典,可修改,不可重新赋值
1 2 3 4 5 6 7 |
|
如果函数中调用的变量在函数中存在、全局中也存在,优先使用自己定义的变量,如果自己没有定义这个变量,再去父类去找,父类没有,再向上一层一层去找。
1 2 3 4 |
|
函数中的变量,外部无法使用。只能自己使用。
global可以在函数中对全局变量重新赋值:
1 2 3 4 5 6 7 |
|
全局变量的命名规则:
全部都是大写,如:NAME = ‘yangrz‘ AGE = 19,这样在引用的时候,就知道它是全局变量。
四、内置函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
|