Python函数简介
函数基本概念
- 函数是一个对象
- 函数是一个可用来保存代码,并且可以在需要的时候,对着也语句进行多次调用
函数定义方式
函数定义方式
def 函数名(参数): 可执行代码 ... #例打印I Love Java def printer(): print('I Love Java')
函数的调用
printer() #输出结果为:I Love Java
函数参数的使用
形参:是定义函数时函数名后()中的元素
实参:在调用函数时函数名后()中的元素
不定长参数:在形参前加“ * “,可以获取所有的实参,并把所有的实参保存在元组中,带” * “ 的参数在形参中只能有一个。
def s(*a): result = 0 for i in a: result += i print('result = ',result) s(1, 2, 3, 4) #输出结果为:10
关键字参数:” ** “可以将关键字参数储存在字典中,key是名字,value是值;
弊端:形参必须要与包中输出个数相同
def fn(a, b, c): print(a) print(b) print(c) t = (10,20,30) d = {'a':10, 'b':20, 'c':30} fn(**d) fn(*t) #输出结果为: #10 #20 #30 #10 #20 #30
函数的返回值
返回值就是函数执行以后返回的结果
通过return来指定函数的返回值
return后面可以跟任何对象,返回值甚至可以是一个函数
当函数运行return后就会自动退出
例
def sum(*c): result = 0 for i in c: result += i return result s = sum(10) print(s)
文档字符串
help()是Python中内置函数,通过help()函数可以查询Python中函数的用法
在定义函数时,可以在函数内部编写文档字符串,文档字符串就是对函数的说明
例:print函数的帮助文档
help(print) #输出结果为: print(...) print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. flush: whether to forcibly flush the stream.
自己定以帮助文档
def sum(a,b): ''' sum()是求a的b次方的函数 a:是底数 b:是次数 ''' return a ** b help(sum) #输出结果为: sum(a, b) sum()是求a的b次方的函数 a:是底数 b:是次数
函数的作用域
- 作用域指的是变量生效的区域
- 在Python中一共有两种作用域
- 全局作用域
- 全局作用域在程序执行时创建,在程序执行结束时销毁
- 所有函数以外的区域都是全局作用域
- 在全局作用域中定义的变量,都是全局变量,全局变量可以在程序的任意位置进行访问
- 函数作用域
- 函数作用域在函数调用时创建,在调用结束时销毁
- 函数每调用一次就会产生一个新的函数作用域
- 在函数作用域中定义的变量,都是局部变量,它只能在函数内部被访问
命名空间
命名空间实际上就是一个字典,是一个专门用来存储变量的字典
locals()用来获取当前作用域的命名空间
如果在全局作用域中调用locals()则获取全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间
返回值是一个字典
代码如下:
def fn(): i = 0 s = locals() print(s) global_s = globals() global_s['a'] = 30 print(global_s) fn()
递归函数
- 概念:递归是解决问题的一种方式,它的整体思想,是将一个大问题分解为一个个的小问题,直到问题无法分解时,在去解决问题
- 条件:
- 基线条件 问题可以被分解为最小问题,当满足基线条件时,递归就不执行了
- 递归条件 可以将问题继续分解的条件
- 递归例题:汉诺塔游戏
- 汉诺塔游戏Python代码