python基础(函数名的使用、闭包、迭代器、isinstence()函数、递归))
一、函数名的使用:
1.1 特点:
函数名作变量赋值(返回函数名的时候不能加括号)
返回值 函数名(返回函数名的时候不能加括号)
函数名: 可以容器的元素
函数名可以当做参数被传递
1.2 函数的使用方法:
# 函数名作变量赋值 def func(): print(1) a = func a() func() # 函数名可以当做值赋值给变量 # 函数名作返回值返回 def outer(): def inner(): print(111) return inner inner = outer() inner() # 函数名作元素 def func(): print(1) def func2(): print(2) li = [func,func2] print(li) # 函数名可以当做元素放到容器里 # 函数名作参数传递 def func1(): print(111) def func2(fn): # 函数名可以当做参数被传递 fn() func2(func1)
二、 闭包:
2.1 形成闭包的必要条件:
是一个嵌套函数
在嵌套函数的内部函数使用外部变量(非全局的变量)
2.2 闭包的特点:
python中闭包,会进行内存驻留, 普通函数执行完后就会销毁
全局里存放变量、方法会有污染和不安全的现象,闭包进行隔离
装饰器的本质就是闭包
2.3 闭包的缺点:
存在内存泄漏
2.4 闭包的常用方法:
# 查看函数是否是闭包函数 def wrapper(): a = 10 def inner(): print(a) # print(inner.__closure__) # 不是None 就是闭包 inner() wrapper() # 闭包函数的调用方法: # 方式一: def wrapper(): a = 10 def inner(): print(a) return inner inner = wrapper() inner() # 方式二: def wrapper(): a = 10 def inner(): print(a) return inner wrapper()() # 闭包传参: # 方式三: def outer(): a = 10 def inner(num): nonlocal a a += num print(a) return num return inner inner = outer() num = inner(110) print(id(num))
三、 迭代器:
3.1 定义:
可迭代对象: 具有__iter__方法就是可迭代对象
迭代器: 具有__iter__方法,__next__就是迭代器
for循环的机制 就是迭代器
3.2 迭代器的特性:
惰性机制
迭代器不能从下向上走
一次性使用,用完就没了
3.3 创建迭代器:
迭代对象.__iter__()
3. 4迭代器的只用方法:
# 迭代器的使用: li = [1, 2, 3] # 迭代对象 b = li.__iter__() # 创建一个迭代器 print(b.__next__()) # 每次获取一个值 print(b.__next__()) print(b.__next__())
3.5 for函数的迭代器机制:
# for函数的迭代器机制: li = [1,2,3,4,6,7,8,9] em = li.__iter__() while 1: try: print(em.__next__()) except StopIteration: break
四、 isinstence()函数:
4.1 功能:
判断一个对象是否是一个已知的类型
4. 2 查看对象是否为迭代对象及迭代器:
l = [1, 2, 3] l_iter = l.__iter__() # 创建迭代器 print(l_iter) # 迭代器内存地址 from collections import Iterable from collections import Iterator print(isinstance(l, Iterable)) # 可迭代对象 print(isinstance(l, Iterator)) # 不是迭代器 print(isinstance(l_iter, Iterator)) print(isinstance(l_iter, Iterator))
五、 递归:
5.1 特点:
自己调用自己本身
有明确结束条件
5.2 递归深度:
递归默认层次,官方说明 1000,实际测试 998/997
更改系统递归深度:
# 更改pyhton解释器递归深度 import sys sys.setrecursionlimit(10)
5. 3 递归思想:
# 递归思想 def f(): def a(): def b(): def c(): return '哈撒给!' return c() return b() return a() print(f())
5. 4 递归的常用函数使用方法:
# 递归示例: def func(age): age = age + 1 print(age) if age == 5: return func(age) func(2) # 递归斐波那契数列 def fibonacci(n): if n <= 2: return 1 else: return fibonacci(n - 2) + fibonacci(n - 1) for i in range(1, 10): print(fibonacci(i)) # 递归阶乘 def fact(n): if n == 1: return 1 return n * fact(n - 1)
https://www.cnblogs.com/WiseAdministrator/