面试-python-三大神器 以及对象引用深浅拷贝 传参方式

'''

一.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,引用传递可变参数
# 可变类型是引用传递,数值字符串是值传递



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值