在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
Python对bytes类型的数据用带b前缀的单引号或双引号表示
x = b'ABC' //每个字符占一个字节
'ABC'.encode('ascii')
b'ABC'.decode('ascii')
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
在Python中,采用的格式化方式和C语言是一致的,用%实现
1只要把一个列表生成式的[]改成(),就创建了一个generator
2如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
把list、dict、str等Iterable变成Iterator可以使用iter()函数
from functools import reduce
sorted([36, 5, -12, 9, -21], key=abs,reverse=True)
函数对象有一个__name__属性,可以拿到函数的名字
在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)
在定义wrapper()的前面加上@functools.wraps(func)
Pillow
mysql-connector-python,用于科学计算的NumPy库:numpy,用于生成文本的模板工具Jinja2
配合getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态
相同名称的实例属性将屏蔽掉类属性
from types import MethodType
Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性
class Student(object):
__slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称
把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@xxx.setter
__str__()返回用户看到的字符串,而__repr__()返回程序开发者看到的字符串,也就是说,__repr__()是为调试服务的
__getitem__ # xx[1]
__iter__ __next__
__getattr__
__call__ 直接在实例本身上调用
__new__
from enum import Enum
metaclass是Python中非常具有魔术性的对象,它可以改变类创建时的行为
assert 启动Python解释器时可以用-O参数来关闭assert
python3 -m pdb
pdb.set_trace() # 运行到这里会自动暂停
logging
import unittest
import BytesIO StringIO
from multiprocessing import Process
import subprocess
Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装
import threading
# 创建全局ThreadLocal对象:
local_school = threading.local()
pip install mysql-connector-python --allow-external mysql-connector-python
import asyncio
从Python 3.5开始引入了新的语法async和await,可以让coroutine的代码更简洁易读
pip install aiohttp