模块的导入用import和from,以及reload调用
import相当于做了一次赋值语句。
reload是一个方法,重载一个模块,不会重载该模块导入的其他模块。
不可变对象:数字,字符串,元组,不可变集合
可变对象:列表,字典,可变集合
列表解析:
例子:
M=[[1,2,3],[4,5,6],[7,8,9]]
col2=[row[1] for row in M]
结果:col2=[2,5,8]
list[map(sum,M)]
结果:[6,15,24]
filter(x,y) #x是判断方法,y是可迭代的容器,用法类似map,用于过滤元素,判断为true的元素才返回
reduce(x,y) #x是累计方法,例如x+y,y是可迭代容器,用于累计容器所有元素,比如累加和累乘
扩展列表解析语法:a for b in c if d
循环计数器:range(start,end,step)函数
三元选择表达式:x if y else z
type和isinstance函数可以确定类型
floor除法(向下取整)://
支持复数计算:2+1j*3 结果 2+3j
round函数,四舍五入,可以选择保留几位小数来四舍五入,round(x,y=0),x保留y位小数。
Fraction(x,y),分数x/y,也可以通过小数(字符串形式)创建Fraction(x)。
浮点数对象的方法:as_integer_ratio() 转换为分子分母比
分数对象的方法:from_float() 从浮点数转换为分数
raw字符串抑制转义,例:r'x' 但是不能以\结尾,\'转义抑制不了。
"""三重引号编写多行字符串,可以用来做注释,功能类比c的/**/。
扩展分片:x[i:j:k],范围i到j,步长为k。
==判断值是否相等,is判断是否是同一个对象
*变量表示一个列表,比如*a,a是一个列表或元组(传参元组其余列表),可以匹配n个元素,*a则将列表解包变成n个变量
**变量则表示一个字典,其他功能与*一样
命名规则:
以_下划线开头的变量名(_x)不会被from module import *导入
前后有_下划线的变量名是系统变量名,对解释器有特殊意义
以两_下划线开头,结尾没有两个下划线的变量名是类的本地变量
通过交互模式运行时,只有单个下划线的变量名会保存最终结果
python赋值是语句而不是表达式,并不会返回值。
zip(...):用于并行迭代,比如有几个容器你需要同时迭代,可以使用这个函数
enumerate(x):返回生成器对象,对象是一个元组(index,value),偏移量和值。
iter(x):返回迭代器对象
通过迭代器的_next_()方法迭代或者用next(x)方法迭代,迭代结束返回StopIteration异常
作用域法则:
内嵌的模块是全局作用域。
全局作用域的作用范围仅限单个文件。
每次对函数的调用都创建了新的本地作用域。
赋值的变量名除非声明为全局变量或非本地变量,否则均为本地变量。
其他的变量名都可以归纳为本地、全局或者内置的。
变量名解析:
变量名引用分为3个作用域查找:首先是本地,之后是函数内,之后是全局,最后是内置。
在默认情况下,变量名赋值会创建或改变本地变量。
全局声明和非本地声明将赋值的变量名映射到模块文件内部的作用域。
lambda表达式:lambda x: y #x为参数,y为返回的表达式
生成器函数用yield表达式,生成器函数可以用迭代协议,可以用send(x)方法传递参数给yield语句
@abstractmethod装饰器,抽象方法,类比c的纯虚函数
@staticmethod,静态方法
_slots_类属性可以限制类的合法属性集合,又能优化内存和速度性能
类方法与静态方法的区分:类方法需要引用类,静态方法不需要引用类
异常捕获结构:
try:
except:
else:
finally: