'''
一.python面试3大神器
1.装饰器
2.迭代器iterator
实现了__iter方法返回自身
实现了__next方法返回下一个元素,没有元素后抛StopIteration结束
3.生成器generator
语法糖的意思,使用了一个关键词叫yield, for loop循环里面所有的数字都是yield进去
generator的好处就是不用占用一整块的内存,把所有的数字都存储起来,你每次需要用的时候就调用一下next就会计算得到下一个值,你就可以用,然后比较省内存
区别就是一个是实现类方法__iter和__next方法
另一个就是一个方法return n 改为yield
二.3大引用
1.深浅拷贝赋值
2.对象引用
'''
class Counter:
def __init__(self, max):
self.max = max
def __iter__(self):
self.n = 0
return self
def __next__(self):
if self.n < self.max:
result = self.n
self.n += 1
return result
else:
raise StopIteration
# 使用迭代器
counter = Counter(5)
for i in counter:
print(i)
def counter(max):
n = 0
while n < max:
yield n
n += 1
# 使用生成器
for i in counter(5):
print(i)
# 装饰器带参数的
def aabb(n):
def outter(f):
def inner(*args, **kwargs):
print(n)
return f(*args,**kwargs)
return inner
return outter
@aabb(3)
def see_res(*args, **kwargs):
print(666)
see_res()
# with语句解析,可以与普通类的__init__和__delelte__析构函数的功能类似
# (假设是)普通类对象创建 ContextManager()
# with对象创建 with ContextManager()
# 当创建的with对象的时候调用__enter方法,如果是操作文件的话就是打开一个文件,方法当with语句结束后,调用__exit方法,从这个代码块退出如果是文件操作的话就是close方法
# 操作文件或者网络的地方比较有用,如果文件没关,或者socket没关的话,可能内存不够用了,或者文件被占用打不开的情况
class ContextManager(object):
def __enter__(self):
print("[in __enter__] acquiring resources")
def __exit__(self, exception_type, exception_value, traceback):
print("[in __exit__] releasing resources")
if exception_type is None:
print("[in __exit__] Exited without exception")
else:
print("[in __exit__] Exited with exception: %s" % exception_value)
return False
with ContextManager():
print("[in with-body] Testing")
# is 比较引用id值
# == 比较字面值 eq
# 内存管理机制以及调优手段
'''
引用计数,垃圾回收,内存池
1.手动垃圾回收
2.调高垃圾回收阈值
3.避免循环引用
'''
# 函数调用参数的传递方式,以及是值传递还是引用传递
# 传递方式:按顺序位置参数,关键字参数,可以写默认参数值n=6,引用传递可变参数
# 可变类型是引用传递,数值字符串是值传递
面试-python-三大神器 以及对象引用深浅拷贝 传参方式
最新推荐文章于 2025-08-04 22:31:11 发布