import gc import time # gc.get_count() # gc.get_threshold()#默认700.10.10 # gc.set_threshold() class AA(): def __new__(cls, *args, **kwargs): print('new') return super(AA,cls).__new__(cls) def __init__(self): print('object:born at %s'%hex(id(self))) def __del__(self): print('%s 被系统回收'%hex(id(self))) def start(): while True: a = AA() b = AA() a.v = b b.v = a del a del b print(gc.set_threshold()) print(gc.get_count()) time.sleep(0.1) start()
LAO老师,这里是提示要传入参数吗??但是视频上也没有啊,那到底哪里出问题??
这里保留两位小数为什么输出的是12.35,而不是12.34呢
老师,请问,这里内部函数中wrtieLog中使用外部函数传进来的func为什么不用nonlocal定义一下,直接可以使用呢
def mylog(type): def decorator(func): def infunc(*args, **kwargs): if type == "文件": print("文件中:日志纪录") else: print("控制台:日志纪录") return func(*args, **kwargs) return infunc return decorator @mylog("文件") def fun2(a, b): print("使用功能2", a, b) # return 100 if __name__ == '__main__': fun2(100, 200) # print(fun2(100, 200))
老师,在装饰器不接受参数的情况下,@mylog相当于fun2=mylog(fun2)。
那在接收参数时,@mylog("文件")能不能改写成上述形式呢?怎么改写呢?还有想请老师帮我解释下外面再套一层来接收装饰器参数这种方式是怎么执行出这样的结果的?问题有点多麻烦老师帮我解释清楚一点,谢谢老师!!!
import time class CacheDecorator(): __cache = {} def __init__(self,func): self.func = func def __call__(self, *args, **kwargs): #如果缓存中有对应的方法名,则直接返回对应的返回值 if self.func.__name__ in CacheDecorator.__cache: return CacheDecorator.__cache[self.func.__name__] #如果缓存中没有对应的方法名,则进行计算,并将结果缓存 else: result = self.func(*args,**kwargs) CacheDecorator.__cache[self.func.__name__]=result return result def cost_time(func): def infunc(*args,**kwargs): start = time.time() result = func(*args,**kwargs) end = time.time() print(f'耗时:{end-start}') return result return infunc @cost_time @CacheDecorator def func1_long_time(): ''' 模拟耗时较长,每次返回的结果都一样的情况 ''' print('start func1') time.sleep(3) print('end func1') return 999 if __name__ == '__main__': r1 = func1_long_time() r2 = func1_long_time() print(r1) print(r2)
我不太理解为什么第二次耗时是0
代码:
import re s="http://adaadd.jpgadadadaxahttp://cfsadd.jpgqqwdxhttp://abc.pngadadasds,http://ada.gif" pattern=r"http://.+jpg|http://.+gif" v=re.findall(pattern,s) print(v)
问题:老师请问一下,这里我想把格式为格式为http://.+jpg和http://.+gif这两个链接提取出来,可是为什么结果显示链接http://adaaadd.jpg和http://cfsadd.jpg这两个链接合在了一起,还有最后的http://ada.gif也和http://abc.pngadaadasds合在了一起,麻烦老师给我讲一下这里面的原因?还有我这里想给http://.+jpg和http://.+gif的后面各加一个结尾符来解决这个问题,可是这样运行结果也不对
老师请问一下为什么加了结尾符以后结果会变成这样,麻烦老师讲一下这块,谢谢老师
""" 装饰器的使用 """ def funcOut(func): def funcIn(): return "《" + func() + "》" return funcIn def funcOut2(func): def funcIn(): return '$' + func() + '$' return funcIn() @funcOut2 @funcOut # bookName = funcOut2(bookName) def bookName(): return "西游记" print(bookName()) print(bookName)
老师,当我使用两个装饰器时,最后一行的print中:bookName后面加括号就报错,不加括号 就正常;视频中老师是加了括号的,为什么我的报错呢?
import re m = re.match('[abcd].+','6hello6') if m: print(m.group()) else: print('匹配失败')
老师,这个.+在这里的含义是‘枚举abcd’吗?为啥呀
还是别的意思呢
老师 为什么return x*2x就报错,而x*2*x没问题呢?
def f(x): return x*2x L = map(f,[1,2,3,4,5,6]) print(list(L)) def f(x): return x*2*x L = map(f,[1,2,3,4,5,6]) print(list(L))
老师,这个左边界是怎么定义的呢?qwe不是在右边吗,为啥是左边界
为什么 ret = re.match("[A-Z][a-z]*","M")可以匹配上,不是最少有两个字母吗
l=map(lambda x:x**2,[1,2,3,4,5,6]) print(list(l))
老师,这串代码执行下来,如果不加list直接打印l为什么打印不出来结果,map执行后不是自动返回新的序列对象嘛?
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637