Python学习笔记(八):
- 复习回顾
- 递归函数
- 内置函数
1. 复习回顾
1. 深浅拷贝
2. 集合
应用:
- 去重
- 关系操作:交集,并集,差集,对称差集 操作:
- 定义 s1 = set('alvin')
- 添加 s.add() s.update()
- 删除 s.remove() 关系操作:
- in , not in
- == , !=
- 超级,子集
- 交集
- 并集
- 差集
- 对称差集
3. 函数
- 特性:代码重用、保持一致性、可扩展性
- 函数的定义
- 函数的参数:必备参数、关键字参数、默认参数、不定长参数
- 函数的返回值
- 作用域:LEGB
4. 补充:高阶函数
高阶函数是至少满足下列一个条件的函数:
- 接受一个或多个函数作为输入
- 输出一个函数
代码示例:
def f(n): return n*n print(f(4)) # 结果:16def foo(a,b,func): return func(a) + func(b)# 函数名可以进行赋值# 函数名可以作为参数print(foo(1,2,f)) # 结果:5
2. 递归函数
递归的特性:
- 自己调用自己
- 有一个结束条件
- 递归的效率比较低
- 递归可以实现的循环一定可以解决
代码示例:
# 阶乘def fact(n): if n == 1: return 1 else: return n*fact(n-1)print(fact(5))# 菲波那切数列-后面一个数字等于前面两个数相加def fei(n): if n == 1: return 0 if n == 2: return 1 else: return fei(n-1)+fei(n-2)print(fei(5))
3. 内置函数
几个比较重要的内置函数:
- filter(function, sequence)
代码示例:
str = ['a', 'b','c', 'd'] def fun1(s): if s != 'a': return s ret = filter(fun1, str)print(list(ret))# ret是一个迭代器对象
- 对sequence中的item依次执行function(item),将执行结果为True的item做成一个filter object的迭代器返回。可以看作是过滤函数
- map(function, sequence)
代码示例:
str = [1, 2,'a', 'b']def fun2(s): return s + "alvin" ret = map(fun2, str)print(ret) # map object的迭代器print(list(ret))# ['aalvin', 'balvin', 'calvin', 'dalvin']
- 对sequence中的item依次执行function(item),将执行结果组成一个map object迭代器返回. map也支持多个sequence,这就要求function也支持相应数量的参数输入:
ef add(x,y): return x+yprint (list(map(add, range(10), range(10))))##[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
- reduce(function, sequence, starting_value)
代码示例:
from functools import reduce def add1(x,y): return x + y print (reduce(add1, range(1, 101)))## 4950 (注:1+2+...+99)print (reduce(add1, range(1, 101), 20))## 4970 (注:1+2+...+99+20)
- 对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用
- lambda
#普通函数def add(a,b): return a + bprint add(2,3)#匿名函数add = lambda a,b : a + bprint add(2,3)#========输出===========55
- 匿名函数的命名规则,用lamdba 关键字标识,冒号(:)左侧表示函数接收的参数(a,b) ,冒号(:)右侧表示函数的返回值(a+b)。
- 因为lamdba在创建时不需要命名,所以,叫匿名函数