python 函数(二)
一、高阶函数
1、函数名可以赋值
2、函数名可以作为函数参数
3、函数名可以作为函数的返回值
eg:
def f1(n): return n*n def f2(a, b, f): return f(a) + f(b) # 此处f() 相当于 f1() num = f2(1, 2, f1) print(num)
>>> 5
二、递归函数
1.自己调用自己;
2.有一个结束条件;
eg1: 递归求5!
def fat(n): if n == 1: return 1 return n*fat(n-1) print(fat(5))
>>> 120
eg2: 递归求斐波那契数列(输入位数,输出该位置所对应的值)
斐波那契数列: 0 1 1 2 3 5 8 13 21 34 55(从0、1开始,后面的任意一个数为她前面两个数的和)
def fibo(n): if n <= 1: return 1 return fibo(n-1) + fibo(n-2) print(fibo(8)) # 输出斐波那契数列的第8个数(是从0开始计数的)
>>> 21
三、内置函数
1.all() 函数
all() # 如果括号里面的内容为真,返回True,否则返回False
2.eval() 函数
eval() # 相当于一个计算器,在括号里面直接输入要计算的内容
3.filter() 函数, 相当于过滤器,不符合条件的过滤掉,返回的值是过滤后的内容
eg:
st = ['a', 'b', 'c', 'd'] def fun(a): if a != 'a': # 筛选条件 return a ret = filter(fun, st) print(list(ret))
>>> ['b', 'c', 'd']
4.map() 字符串处理
st = ['c', 'd'] def fun(a): return a + "xss" # 给列表中的每个元素后面加上‘xss’ 然后输出 ret = map(fun, st) print(ret) # map object的迭代器, 输出的是存放该函数的地址 print(list(ret))
>>> <map object at 0x000001E7903B40B8>
['cxss', 'dxss']
5.reduce()函数 叠加器
from functools import reduce # 使用reduce() 要加上该调用语句 def add(x, y): return x + y print(reduce(add, range(1, 10))) # 输出1-9相加的和
# 执行机制:取出range中的前两个数1和2分别赋值给x和y,执行adda()函数后把结果放入range中(此时range中数变为3 3 4 5 6 7 8 9),以此类推
6.lambda() 匿名函数
from functools import reduce # 使用reduce() 的调用语句 print(reduce(lambda x, y: x*y, range(1, 7))) # 计算6!
# 执行机制:取出range中的前两个数1和2分别赋值给x和y,然后相乘,结果放入range中(此时range中数变为2 3 4 5 6),以此类推
四、关键字 global 和 nonlocal (不多解释,直接上例子)
eg1:
count = 10 def f(): global count # 声明count是一个全局变量 print(count) # 如果前面不用global声明,函数报错->UnboundLocalError: local variable 'count' referenced before assignment
# 原因:count变量在定义之前调用,既全局变量不能在局部被修改 count = 5 print(count) f()
>>> 10
5
eg2:
def outer(): count = 10 def inner(): nonlocal count # 局部变量用nonlocal关键字 声明 count = 20 print(count) inner() print(count) outer()
>>> 20
20