随笔分类 - python3
1
摘要:协程,又称为'微线程'。英文名Coroutine。 协程的特点:一个线程执行 协程的优势: 1、执行效率高 因为协程切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。 2、不需要多线程的锁机制 因为只有一个线程,也不存在同时写变量冲突,
阅读全文
摘要:如果您将某个东西定义为classmethod,这可能是因为您打算从类而不是类实例中调用它。 定义类方法的几种方式: 调用说明 其他案例:
阅读全文
摘要:1、单继承 super().__int__()和 Base.__init__(self)是一样的, super()避免了基类的显式调用。 2、多继承 注意:多继承时,会设计继承顺序,supper()相当于返回继承顺序的下一个类,而不是父类。 在多重继承中 ,ChildClassA()中的 super
阅读全文
摘要:继承的好处:子类实现父类的全部功能 1、单继承 若父类和子类有共同的方法或属性,则子类对父类方法或属性进行覆盖 class ClassA: def __init__(self): self.a = 'a' print('init A') def sayName(self): print('Name'
阅读全文
摘要:1、新建 test.py 模块: 运行结果: 2、新建 Demo.py 模块 输出: 总结: 1、__name__是一个系统变量,用来标识模块的名字。 2、__name__ == '__main__'的意思: a) 当 python 文件被直接运行的时候,__name__的值为’__main__’
阅读全文
摘要:为什么使用序列化? 因为程序运行期间,所有的变量都在内存中。可以随时修改变量,但程序一接触,所占的内存就会被操作系统回收。如果没有把修改后的'Bill'存储到磁盘上,下次重新运行程序,变量又被初始化为'Bob'。 通过将对象序列化,可以将其存储在变量或内存中,可以保存当时的状态,实现生命周期的延长,
阅读全文
摘要:两种方式定义枚举类: 1、直接使用Enum列出多个枚举值来创建枚举类。 2、通过集成Enum基类派生枚举类。 程序示范: 1、直接使用Enum列出多个枚举值来创建枚举类。 上面的代码使用Enum()函数来创建枚举类,该方法第一个参数:枚举类的类名;第二个参数:元组,用于列出所有枚举值。 通过枚举值访
阅读全文
摘要:@property装饰器就是负责把一个方法变成属性调用的. @property广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性 把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建
阅读全文
摘要:给实例绑定一个属性: 给实例绑定一个方法: 但是,给一个实例绑定的方法,对另一个实例是不起作用的: 为了给所有实例都绑定方法,可以给class绑定方法: 给class绑定方法后,所有实例均可调用: 通常情况下,上面的set_score方法可以直接定义在class中,但动态绑定允许我们在程序运行的过程
阅读全文
摘要:使用__slots__的目的:限制实例的属性 用法:定义class的时候,定义一个特殊的__solts__变量,来限制实例能添加的属性。 由于'score'没有被放到__slots__中,所以不能绑定score属性,试图绑定score将得到AttributeError的错误。 使用__slots__
阅读全文
摘要:import urllib.requestimport randomimport sslproxy_list = [ {"https" : "196.61.27.58:53281"}, {"http" : "121.232.144.81:9000"}]# 随机选择一个代理proxy = random
阅读全文
摘要:""" 基本的urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能。所以要支持这些功能: 使用相关的 Handler处理器 来创建特定功能的处理器对象; 然后通过 urllib.requestbuild_opener()方法使用这些处理器对象,创建自定义opener对象
阅读全文
摘要:urllib包含的常用模块:import urllib.request # 打开和读取url请求import urllib.error # 异常处理模块import urllib.parse # url解析模块import urllib.robotparser # robots.txt解析模块"""
阅读全文
摘要:在Python中,这种一边循环一边计算的机制,称为生成器:generator。生成器保存的是算法,每次调用 next() ,就计算出 下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出 StopIteration 的异常当然,这种不断调用 next() 实在是太变态了,正确的方法是使用
阅读全文
摘要:为了限制实例的属性,可以在定义class的时候,定义一个特殊的__slots__变量,来限制class实例能添加的属性。比如,只允许对Persion实例添加name 和 age 属性class Person(object): __slots__ = ("name", "age")P = Person
阅读全文
摘要:给实例动态添加方法,需引入types模块,用其的MethodType(要绑定的方法名,实例对象)来进行绑定;给类绑定属性和方法,可以通过 实例名.方法名(属性名) = 方法名(属性值) 来进行绑定。给类添加方法,通过@classmethod;给类添加静态方法通过@staticmethod impor
阅读全文
摘要:装饰器(decorator)应用的场景:1、引入日志2、函数执行时间统计3、执行函数前预备处理4、执行函数后清理处理5、权限校验等场景6、缓存# 通用装饰器import functoolsdef log(func): # 若是不加这个,test()函数经过装饰后,test.__name_ 变成了 w
阅读全文
摘要:# 定义一个函数def test(number): # 在函数内部再定义一个函数,并且这个函数用到外边函数的变量, # 那么将这个函数以及用到的一些变量称之为 闭包。 def text_in(number_in): print('in test in 函数, number_in is %d ' %
阅读全文
摘要:可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list、tuple、dict、set、str等; 一类是generator,包括生成器和带yield的generator function。 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。 可以使用isi
阅读全文
摘要:传统的绑定属性值,会把属性暴露出去,而且无法检查参数是否合法,如下: class Test(object): def __int__(self,age): self.age = age 为了检查参数的合法性,可以设置一个get_age()方法,和一个set_age()方法,如下: class Tes
阅读全文
1
浙公网安备 33010602011771号