随笔分类 - python
多线程与多进程的比较
摘要:多线程适合于多io操作 多进程适合于耗cpu(计算)的操作 # 多进程编程 # 耗cpu的操作,用多进程编程, 对于io操作来说,使用多线程编程 import time from concurrent.futures import ThreadPoolExecutor, as_completed f
阅读全文
线程协作之threading.Condition
摘要:领会下面这个示例吧,其实跟java中wait/nofity是一样一样的道理 import threading # 条件变量,用于复杂的线程间同步锁 """ 需求: 男:小姐姐,你好呀! 女:哼,想泡老娘不成? 男:对呀,想泡你 女:滚蛋,门都没有! 男:切,长这么丑, 还这么吊... 女:关你鸟事!
阅读全文
锁
摘要:别看pyhton有个GIL,但是在多线程编程时与java一样,为了保证数据的案例,还是需要用到锁Lock锁. Lock不是重入锁,在同一个线程中不能多次acquire() RLock才是重入锁 import threading from threading import Lock # 申明一把锁 l
阅读全文
GIL锁
摘要:global interpreter lock 金局解释锁, 使得同一时刻只有一个线程在cpu上执行python的字节码文件,无法将多个线程映射到各个cpu上执行. gil会根据执行的字节码行数或cpu时间片,或io操作,会主动释放gil锁 import threading total = 0 de
阅读全文
使用生成器读取一个超大文件
摘要:pyhon读取文件很方便,但是,如果文件很大,而且还是一行文件,那就蛋疼了. 不过还好有read(size)方法,这个方法就是每次读取size大小的数据到内存中 下面来个示例 def readlines(f, separator): ''' 读取大文件方法 :param f: 文件句柄 :param
阅读全文
生成器原理介绍
摘要:1. python函数运行原理 import inspect frame = None def foo(): bar() def bar(): global frame frame = inspect.currentframe() pass # python解释器 python.exe 会用一个叫做
阅读全文
生成器的简单使用
摘要:# 生成器函数 函数里面只要有yield关键字,就是一个生成器函数 # 生成器对象也是实现了迭代器协议了的 def gen_func(): yield 1 yield 2 yield 3 def func(): return 1 # 斐波拉契函数 a1 + a2 = a3 # 0,1,1,2,3,5
阅读全文
迭代器与可迭代对象
摘要:可迭代对象: 实现了__iter__协议的对象就叫可迭代对象 迭代器 : 继承了Iterator的类或者说实现__iter__和__next__协议的对象就叫着迭代器 二者的关系: 使用迭代器去遍历可迭代对象 (理解起来跟java一样的) 下面是个示例 from collections.abc im
阅读全文
metaclass简单使用
摘要:metaclass : 元类, 就是创建python类对象的类 # 便用type动态创建类 # 1. 使用type创建一个User类对象 无基类,无属性 . () : 表示基类, {}:属性 User = type('User', (), {}) user = User() print(user)
阅读全文
__new__与__init__的区别
摘要:__new__ : 控制对象的实例化过程 , 在__init__方法之前调用 __init__ : 对象实例化对象进行属性设置 class User: def __new__(cls, *args, **kwargs): """控制对象的创建的过程,在__init__方法之前调用""" print(
阅读全文
__getattr__属性查找
摘要:from datetime import date """ __getattr__ : 在查找不到对象的属性时调用 __getattribute__ : 在查找属性之前调用(一般都不要覆写) 所以,访问的属性的调用顺序是: __getattribute__ > 对象属性 > __getattr__
阅读全文
@property属性装饰器
摘要:顾名思义,@property就是一个跟属性相关的装饰器, 使用了它之后,取值和赋值操作都变得简洁 from datetime import date, datetime class User: def __init__(self, name, birthday): self.name = name
阅读全文
python编程中的一个经典错误之list引用
摘要:请看下面代码 class User: def __init__(self, name, hobby=[]): self.name = name self.hobby = hobby def add_hobby(self, hobby): self.hobby.append(hobby) def re
阅读全文
ChainMap简单示例
摘要:ChainMap是dict的子类,拥有dict的所有功能, 感觉用它的地方吧??? from collections import ChainMap """ 相当于join两个dict的操作 """ # 示例1 dict1 = {"a": 1, "b": 2} dict2 = {"c": 3, "d
阅读全文
deque的简单使用
摘要:deque 是python提供的一个数据结构,线程安全,功能比list强大 from collections import deque user_list = ['admin', 'root'] user = user_list.pop() # 弹出list尾部的元素, list没有提供操作头部的方
阅读全文
dict以及defaultdict的简单使用
摘要:先看一个需求 from collections import defaultdict """ 需求: 统计user_list中字母出现的次数 """ user_dict = {} user_list = ['A', 'B', 'C', 'A', 'C', 'C'] # 第一种方式 for item
阅读全文
namedtuple的简单使用
摘要:""" factory function for creating tuple subclasses with named fields namedtuple 是tuple的子类, 在tuple的基础上增添了许多功能, 最主要是可以把它看成一个类来使用 """ from collections im
阅读全文
python中*args和**kwargs学习
摘要:*args 和 **kwargs 经常看到,但是一脸懵逼 ,今天终于有收获了 """ python 函数的入参经常能看到这样一种情况 *args 或者是 **kwargs 但是它们到底是啥意思呢? 代码能说明一切 """ def hello(*args, **kwargs): print(args)
阅读全文
tuple拆包操作
摘要:""" tuple 是不可变对象 """ user_tuple = ('admin', 18, "cd", "male") print(user_tuple) # tuple 拆包 name, age, address, gender = user_tuple print(name, age, ad
阅读全文
dict常用操作
摘要:dict是python中的常用数据结构,应该尽量掌握其使用方法 """ 初始化一个dict的四种方式: 1. dict() -> 创建一个空的dict 2. dict(mapping) -> new dictionary initialized from a mapping object's (ke
阅读全文
浙公网安备 33010602011771号