闭包
定义:
1. 一个函数可以定义在另一个函数的内部
2. 这个函数可以访问外部函数的变量及参数
3. 在这个函数的外部函数的外部调用这个函数的时候,就形成了闭包
作用:保存函数的状态信息,使函数的局部变量可以保存下来
特点
避免使用全局变量(数据污染)
提供部分数据的实现
更优雅面向对象的实现
eg:
def fun1(x):
a=10
def fun2():
return x+a
return fun2
fun1(3)()
>>>13
注意
闭包的延迟绑定特性,也就是不会立即输出,需要调用在输出,会影响结果的
递归
4. 递归就是自己调用自己
5. 当我们要解决一个大问题的时候,发现大问题可以拆分多个小问题,小问题解决方法和大问题相同
6. 注意:避免无穷递归
7. 递归的效率非常低
#汉诺塔
def han(x,y,z,n):
if n==1:
print("%s--->%s"%(x,z))
else:
han(x,z,y,n-1) #把n-1个移到y底座上
print("%s--->%s"%(x,z)) #把最大的移到z底座上
han(y,x,z,n-1) #把剩余的n-1个移到z底座上
导包
8. import 包名 (注意路径问题)
调用:包名.方法名
包名就是.py文件,包名全小写
#test1.py
def fun1():
print('this in fun1')
#test2.py
import test1
test1.fun1()
>>>this in fun1
- from 包名 import 方法名
调用:方法名
只导入方法名
作用:减少了内存的损耗
#test2.py
from test1 import fun1
fun1()
>>>this in fun1
- from 包名 import *
导入所有方法
使用:方法名()
#test2.py
from test1 import *
fun1()
>>>this in fun1
自己创建包
只需要在文件中创建一个__init__文件,导入当前模块的所有文件(.py)文件,然后下次使用的
时候,就可以直接导入包名,使用包名.函数名使用
from 文件 import *