python面试要点总结:基础篇二
程序员文章站
2022-05-06 16:51:06
...
1、常用名称
1.1可迭代对象
range()、list()等内部有 __ iter __()魔法方法
for循环遍历数据之前,可迭代的对象会自动调用 __ iter __()魔法方法,会将可迭代对象变为迭代器,然后迭代器调用自身的 __next __ ()方法取值
迭代器:迭代取值的工具,通过不依赖索引的的迭代取值方式(它本身也有 __ iter __()方法,执行它是不是变为迭代器,而是返回迭代器本身)
可迭代对象不一定是迭代器
li = [1, 2, 3, 4] # iterable可迭代的对象
li_iter = li.__iter__() # 将可迭代对象转为迭代器
try:
while True:
print(li_iter.__next__())
except Exception as f: # 异常捕获
print(f)
1.1.1判断是否可迭代
①看该对象中是否含有 __ iter __()方法
②使用isinstance判断一个对象是否可迭代与type类似
from collections import Iterable
print(isinstance('123', Iterable)) # 结果为True
print(isinstance([1, 2, 3], Iterable)) # 结果为True
print(isinstance(123, Iterable)) # 结果为False
print(isinstance('asb', (str, int))) # 判断一个对象是不是整数或者字符串类型
1.1.2可迭代对象怎么变为迭代器
①li_iter = li.__iter__() # 将可迭代对象转为迭代器
②li_iter = iter(li)
迭代器不能通过索引取值只能通过next(li_iter)或者li_iter.__next __()取值,只能一个一个顺延取值,超出就报错
1.2生成器
在python中一边循环一边计算的机制,叫做生成器(generator)
作用:如果有海量数据存入内存会造成资源浪费,生成器会在循环的过程中根据算法推断出后续需要的元素,不用存储完整数据,只使用需要的数据从而减小内存消耗,简而言之又想使用大量数据,又想占用少量内存空间
1.2.1创建生成器
①生成器表达式(元组推导式)
②生成器函数
通过yield关键字创造生成器,工作原理也是调用next()或者 __next __()直到捕获异常
def demo(num):
n = 0
while n < num:
yield n # yield返回一个值,并且记住这个返回值的位置,下次调用的时候
# 就会从next的下一条语句执行,与return的区别就是,一个直接结束,一个直到捕获异常
n += 1
res = demo(10)
print(res) # <generator object demo at 0x0000022F4A807148>
print(next(res)) # 0
2、待续…
上一篇: Java面试总结:Java基础篇(1)
下一篇: Android面试题及其答案(一)