# coding=utf-8 """ 闭包的特殊用途: 1。可以在不修改现有功能的源码的前提下,增加新的功能 日志功能(统计访问事件,访问功能,写到日志文件中),权限验证(验证当前中户是否为会员) 开闭原则: 开放:添加功能 关闭:修改源码 """ # 定义一个记录日志的函数:将访问时间以及访问的函数名写入达到文件中(log.txt) import time def writeLog(func): try: file = open('log.txt','a',encoding='utf-8') # 写入相关数据信息(访问函数名,访问的时间) file.write(func.__name__) file.write('\t') # 写入访问时间 file.write(time.asctime()) file.write('\n') except Exception as e: print(e.args) finally: # 关闭文件 file.close() # 闭包 def funcOut(func): def funcIn(): # 新增功能 writeLog(func) func() return funcIn def func1(): writeLog(func1) print("我是功能一") def func2(): writeLog(func2) print("我是功能二") func1 = funcOut(func1) func2 = funcOut(func2) func1() func2()
老师,我不明白等号前的func1和func2 是何时如何被调用的,
import time def wtritelog(func): try: file=open("log.txt","a",encoding="utf=8") file.write(func.__name__) file.write("\t") file.write(time.asctime()) file.write("\n") except Exception as e: print(e.args) finally: file.close() def funcOut(func): def funcIn(): wtritelog(func) func() return funcIn def func1(): wtritelog(func1) print("我是功能1") def func2(): wtritelog(func2) print("我是功能2") func1=funcOut(func1) func2=funcOut(func2) func1() func2() 老师请问我这个运行出来为什么会多出来funIn啊
老师,不是说静态方法不能调用任何类属性和类方法吗,但我自己试验了一下感觉是可以的。。。。
代码如下:
import types class Person(): id=100 def __init__(self,name,age): self.name = name self.age = age def study(self): print("学习使我快乐,一天不写代码,难受") p1 = Person('学生1',18) p2 = Person('学生2',20) p1.study = types.MethodType(study,p1) p1.study() #添加静态方法 @staticmethod def testStaticMehtod(): print('我是静态方法') print(Person.id) #给类添加静态方法 Person.method1 = testStaticMehtod #调用静态方法的方法 p1.method1() p2.method1() Person.method1()
import time import sys # 通过列表推导式创建列表 time.clock() list2 = [x for x in range(10000000)] l_time = time.clock() print(f'通过列表推导式创建列表时间开销:{l_time}') print(f'通过列表推导式创建列表内存开销:{sys.getsizeof(list2)}') # 创建生成器 time.clock() g = (x for x in range(10000000)) g_time = time.clock() print(f'创建生成器时间开销:{g_time}') print(f'创建生成器内存开销:{sys.getsizeof(g)}')
运行结果:
import time import sys # 通过列表推导式创建列表 start = time.time() list2 = [x for x in range(10000000)] end = time.time() l_time = end - start print(f'通过列表推导式创建列表时间开销:{l_time}') print(f'通过列表推导式创建列表内存开销:{sys.getsizeof(list2)}') # 创建生成器 start = time.time() g = (x for x in range(10000000)) end = time.time() g_time = end - start print(f'创建生成器时间开销:{g_time}') print(f'创建生成器内存开销:{sys.getsizeof(g)}')
老师:为何我将 time.clock() 改成 time.time() 后,创建列表的时间开销和创建生成器的时间开销就不同了呢?
def funcOut(func): def funcIn(): return '《'+func()+'》' return funcIn() def bookName(): #不要忘记冒号 return "西游记" bookName=funcOut(bookName()) #给bookName改功能,改成外部函数值 #funcIn=funcOut('西游记')错误 print(bookName())
return '《'+func()+'》'
TypeError: 'str' object is not callable
老师,这个怎么错了?
老师,这个怎么换行不太对啊。需要怎么写代码
老师,麻烦问一下释放是什么意思?
%g,和%dis是什么意思
请问老师这个是什么意思,结果好像不太一样
re pattern=s=v=re.match=(pattern,s) print(v)
""" 装饰器的使用 """ 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后面加括号就报错,不加括号 就正常;视频中老师是加了括号的,为什么我的报错呢?
我的pycharm为什么不能定义函数名为test(),改称其他函数就好了。但视频中可以定义test(),麻烦老师看下要怎么设置才能定义test函数,这个报错好像是测试什么东东?
而且我的Run xxx.py也不对,老师看下时什么原因
视频:
我的截图:
我的报错:
我的代码:
Test10.zip
我的pycharm为什么不能定义函数名为test(),改称其他函数就好了。但视频中可以定义test(),麻烦老师看下要怎么设置才能定义test函数,这个报错好像是测试沙东东?
1398148701.jpg
class Student(): company = 'nidaye' def __init__(self,name,age): self.name=name self.age = age def say_score(self): print(f'{self.name}有{self.age}吗?。.') @classmethod def f1(cls): print(f'{cls.company}2....') s1 = Student('张飞',18) s2 = Student('吕布',40) def study(self): print('你们都是辣鸡。。。') # s1.study = types.MethodType(study,s1) # s1.study() Student.n1 = study s1.n1()
s1.study = types.MethodType(study,s1) s1.study()
和
Student.n1 = study s1.n1()
这两个添加方法一样吗,为啥要用type呢?
如下图为什么把调用闭包放到函数前面就会报错呢?
import time def writeLog(func): try: f=open("log.txt","a",encoding="utf-8") f.write(func.__name__) f.write("\t") f.write(time.asctime()) f.write("\n") except Exception as e: print(e.args) finally: f.close() def func1(): writeLog(func1) def func2(): writeLog(func2)
1.png
我这个代码运行以后为啥没有log的文本文件生成啊
import re pattern = r'.*er\B' s = "123,erabcer" v = re.match(pattern,s) print(v)
老师这个的匹配结果是
123,er
为什么不是none呢?
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战未来微信公众号
百战未来微信小程序
©2014-2026百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637