标签:方法 存储 print ext cti 除了 rom outer 局部变量
1. 函数名的应用(第一类对象)
函数名的命名规范和变量是一样的,函数名其实就是变量名,他是一个特殊的变量,与()配合可以执行函数的变量
def func(): print("我是一个小小的函数") a = func #把函数名名赋值给变量a print(a) #<function func at 0x000000AE20BB1E18> 此处打印的是内存地址 func() #我是一个小小的函数 与括号使用,调用函数 a() #我是一个小小的函数 func = 3 #也可以赋值,但是结果就变成3了 print(func)
可以作为列表中的元素进行存储.
def func1(): pass def func2(): pass lst = [func1, func2] #把函数名存在列表里 for el in lst: el() #调用函数
可以作为参数传递给函数.
def func(): pass def proxy(fn): fn() proxy(func) ## 把函数名作为参数传递给另一个函数
可以作为函数的返回值
def func(): def inner(): pass return inner func()() #调用inner函数,在外部调用内部inner函数!
2. 闭包
闭包:在内层函数中访问外层函数的局部变量
好处:
1. 保护你的变量不受外界影响
a = 10 def outer(): global a a = 20 def outer_2(): global a a = 30 outer_2() outer() print(a) #a的值一直在改变,非常不安全,调用的顺序不一样,结果也不一样
def outer(): a = 10 def inner(): print(a) return inner #而函数里的变量a,除了在函数内部可以改变,外界是无法改变的.
2. 可以让变量常驻内存
def f1(): a=10 def f2(): print(a) #a是外层f1中的变量 return f2 b=f1() #把值赋值给b,因为不知道b什么时候用,所以上面的变量a要常驻内存,为了f2执行的时候有值. b() #调用内部函数,
3. 迭代器
使用dir来查看该数据包含了那些方法
print(dir(str)) #有__iter__ print(dir(int)) # 没有__iter__ #所有的带__iter__可以使用for循环的, 可迭代对象
可迭代对象可以使用__iter__()来获取到迭代器
可迭代对象: Iterable, 里面有__iter__()可以获取迭代器, 没有__next__()
迭代器: Iterator, 里面有__iter__()可以获取迭代器, 还有__next__()
a=‘我想吃花甲粉,但是贫穷限制了我都购买力‘ b=a.__iter__() print(b.__next__()) #我 print(b.__next__()) #想 print(b.__next__()) #吃
迭代器特点:
1. 只能向前. #下一个,下一个,找上一个
2. 惰性机制. #print一回往前去一个值
3. 省内存(生成器)
for循环的内部机制.
1. 首先获取到迭代器.
2. 使用while循环获取数据
3. it.__next__()来获取数据
4. 处理异常 try:xxx except StopIteration:
a=‘该吃饭了,晚上吃啥?‘ it=a.__iter__() # 获取迭代器 while 1: try: # 尝试执行 b=it.__next__() #获取下一个元素 print(b) except StopIteration: #处理错误 break
isinstance()是否是某个类型的实例
from collections import Iterable # 可迭代对象 from collections import Iterator # 迭代器 print(isinstance(it, Iterable)) #True print(isinstance(it, Iterator)) #True
print(isinstance(‘123‘,str) #True
标签:方法 存储 print ext cti 除了 rom outer 局部变量
原文地址:https://www.cnblogs.com/amber-liu/p/9456518.html