知识要点
3.1 函数的简介
3.2 函数的定义和调用
3.3 函数的参数
3.4 函数的返回值
3.5 递归函数
3.6 局部变量和全局变量
3.7 捕获异常
3.1 函数的简介
函数:将需要多次使用的代码块组织为一个小模块,叫做函数。
函数的作用:可以提高编写的效率以及代码的重用。
3.2 函数的定义和调用
函数必须先定义,在调用。
定义函数的格式:
def 函数名(): 代码块调用函数的格式:
函数名() # 调用函数时,函数从头执行,代码执行完毕,调用结束 # 若函数中有 return 语句,执行到 return 语句时,调用结束函数的文档说明:
# help(函数名) 能够看到函数的相关说明 help(input) # 函数名.__doc__ 直接查看文档说明 print(input.__doc__)
3.3 函数的参数
位置参数
位置参数:也叫做必选参数。
# eg:在 power(x,n) 函数中的 x,n 都是位置参数 # 调用时,5、2 分别赋值给 x,n def power(x, n): s = 1 while n > 0: n = n - 1 s = s * x return s power(5, 2)
默认参数
默认参数:将某个未知参数值设定,降低函数调用的难度。
# 调用power(5)时,相当于调用power(5,2) def power(x, n=2): s = 1 while n > 0: n = n - 1 s = s * x return s power(5) ''' 必选参数在前,默认参数在后,否则会报错 当有多个参数时,变化小的参数放后面作为默认参数 '''
可变参数
可变参数:即传入的参数个数时可变的。
可变参数的格式:在参数前面加一个 * 号
def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum calc(5, 2)
参数组合
参数组合:必选参数、默认参数、可变参数 3 种参数组合使用。
参数组合顺序:必选参数、默认参数、可选参数。
def fun1(a, b, c=0, *args): print('a = ', a, 'b = ', b, 'c = ', c, 'args = ', args) fun1(5, 2) fun1(5, 2, c=3) fun1(5, 2, 3, 'a', 'b')
3.4 函数的返回值
返回值:即程序中函数完成一件事情后,最后给调用者的结果。
带有返回值的函数:若要将函数结果返回,需要使用return。
# 定义函数 def cal(a, b): return a+b # 调用函数,顺便保存函数的返回值。 result = cal(100, 98) # result 已经保存了 cal 的返回值,可以直接使用了。 print(reesult)多个返回值
def cal_nums(): print("---1---") return 1 # 以下的代码不会被执行,因为return除了能够将数据返回之外,还有一个隐藏的功能:结束函数 print("---2---") return 2 print("---3---")# return 后面可以是元组,列表、字典等,只要是能够存储多个数据的类型,就可以一次性返回多个数据。若 return 后面有多个数据,那么默认是元组。 def my_function(): return {"num1": 1, "num2": 2, "num3": 3}
3.5 递归函数
递归函数:即函数在内部调用自身本身。
优点:定义简单,逻辑清晰。
缺点:过深的调用会导致栈溢出
def fact(n): if n == 1: return 1 return n * fact( n - 1) ''' 可通过尾递归防止栈溢出。尾递归事实上和循环时等价的,没有循环语句的编程语言只能通过尾递归实现循环。 Python 标准的解释器没有针对尾递归做优化,任何递归 函数都存在栈溢出的问题。 '''# 尾递归 def fact(n): return fact_iter(n, 1) def fact_iter(num, product): if num == 1: return product return fact_iter(num - 1, num * product)查看解释器能够计算的最大的阶乘
import sys max_get = sys.getrecursionlimit() print(max_get)
3.6 局部变量和全局变量
全局变量
全局变量:在函数外边定义的变量
作用范围:能够在所有的函数中进行访问
局部变量
局部变量:在函数内部定义的变量
作用范围:只能够在函数内部使用
3.7 捕获异常
捕获异常语句
语句 图形表示 try/except try/except...else try/fimally