python3个人学习总结

python3个人学习总结

由于自己很久一段时间没接触python的话就会生疏,所以写了summary以防忘记,哈哈哈哈。。

  1. 对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

  2. 函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”。

  3. python2中的range返回的是一个列表。
    python3中的range返回的是一个迭代值。

  4. 生成器: g = (x*x for x in range(10));

  5. 列表(tuple)或者字典传参: *args,**kwargs。

  6. 高阶函数: map(func,*args) reduce filter sorted:排序的关键在于实现一个映射函数。key代表的是一个func,可以是系统自带的,也可以是自己定义的函数。

  7. 装饰器decorator: functools.wraps 则可以将原函数对象的指定属性复制给包装函数对象, 默认有 modulenamedoc,或者通过参数选择。

  8. 偏函数: functools.partial(func,参数) 参数可以是dict。
    eg: int2=functools.partial(int,base=2);eg: int2=functools.partial(int,base=2);
    其实就是创建一个新的函数,而这个新的函数可以固定原函数的部分参数。

  9. 每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。init.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是包的名字。

  10. isinstance: 可以用来判断数据类型。 eg: isinstance([1,2,3],(list,tuple))

  11. 实例属性和类属性的区别: 类属性对于每个类实例对象都有,而相同的实例属性可以覆盖掉类属性,但是对其他类实例对象来说没有影响。

  12. 给实例绑定一个方法: from types import MethodType s.set_age = MethodType(set_age,s);其中set_age is a function,s is a instance of class。
    注意: 给一个实例绑定的方法,对另一个实例是不起作用的。为了给所有实例都绑定方法, 可以给class绑定方法。Student.set_age = set_age;

  13. slot: 限制实例的属性。 eg: slot = (‘name’,‘age’); 注意: 仅对当前的类实例起作用,对继承的子类是不起作用的。

  14. @property: 将方法变成属性。
    class Student(object):
    @property
    def score(self):
    return self._score
    @score.setter
    def score(self,value):
    self._score = value

  15. 文件操作:
    1)read: 一次性读取整个文件。
    2)readline: 读取一行。
    3)readlines: 读取整个文件到迭代器。
    note:
    1)用with打开文件的方式比较好,会自动关闭文件。
    2)读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数。
    3)如果文本文件中可能混杂了一些非法的编码的字符,open()还可以接受一个errors参数,处理最简单的方法是忽略(ignore),即errors=‘ignore’。

  16. StringIO: 在内存中读写str。 write getvalue
    BytesIO: 在内存中读写二进制数据。write getvalue

  17. pickle: 序列化。dumps loads dump(data,fw) load(fr)
    json

  18. 注意: 在多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响;而多线程中,所有变量都由所有线程共享。
    多进程: (multiprocessing)
    fork: 在windows下不能用。
    multiprocessing :
    Process: from multiprocessing import Process proc = Process(target,args) proc.start() proc.join()
    Pool: 进程池。 from multiprocessing import Pool
    proc = Pool(4) proc.apply_async(target,args) proc.close() proc.join() close之后就不能添加新的process了。
    多线程: threading thread = threading.Tread(target,args,name) thread.start() thread.join()
    : lock = threading.Lock() eg: lock.acquire() try: something… finally: lock.release() 一定要释放锁。
    # 获取现在线程的名字: threading.current_thread().name
    threading.local(): local = threading.local() 如local.var都是线程的局部变量。
    在Tread和Process中,应该优先选Process。

  19. 协程: 单线程的异步编程模型。

  20. 分布式进程: multiprocessing.managers

  21. 正则表达式:
    注意: 如果一个正则表达式要重复使用的话,出于效率的考虑,可以预编译该正则表达式。 rec = re.compile(pat) rec.match(…)

  22. collections: 集合模块。
    namedtuple: Point = namedtuple(‘Point’,[‘x’,‘y’]) p = Point(1,2) p.x p.y
    deque:
    Counter:

  23. hashlib: 哈希算法: md5() sha1()
    md5: md5 = hashlib.md5() #这里可以赋初值 md5.update(str.encode(‘utf-8’) print(md5.hexdigest())
    应用: 数据库密码: 加盐 get_md5(password+username+theSalt)

  24. 安装虚拟环境:

    1. pip install virtualenv # 安装virtualenv
    2. virtualenv --no-site-packages venv # 创建虚拟环境文件夹
    3. source venv/bin/activate # 激活环境
    4. deactivate # 退出环境
  25. 协程: 利用进程+协程可以很大的程度上利用多核的cpu。
    python对协程的支持是通过generator实现的。
    如果一个函数包含yield关键字,那这个函数就不是普通的函数了,而是一个generator。
    注意: yield不但可以返回一个值,还可以接收调用者发出的参数。 先返回后接收调用者发出的参数。 recieve = yield value

  26. asyncio模块: @asynciio.coroutine def func(): … yield from …
    loop = asyncio.get_event_loop()
    tasks # is a list of tasks, stack.
    loop.run_until_complete(asynciio.wait(tasks))
    loop.close()
    else note: connect = asyncio.open_connection(host,port)
    reader,writer = yield from connect

  27. sys:
    sys.argv:第一个元素永远是命令行执行的.py文件名。

你可能感兴趣的:(python)