了解python
1.python -编译->字节码-解释字节码,字节码是跟平台无关的(c的完全编译->二进制代码,intel芯片的指令)所以比c,c++慢,这也是python最大的缺点了。
2.python解释器,代码-解释器-计算机硬件(安装py之后,有一个解释器跟库,所以需要运行纯py代码,必须安装解释器,解释器就是运行python程序的程序
3.编译是一个简单的翻译的步骤,每条源码转为一条条字节码,字节码无关平台,运行比源码快,解释器将字节码解释运行。
1)如果py有读写权限。那么会把解释出来的字节码保存在pyc文件里面。没发生改变的话,就直接运行pyc文件。这是一种启动速度的优化,减少了解释的步骤。检查源文件跟字节码的时间戳,进行对比来决定是否重新解释。
2)如果没有读写权限,那么会把字节码存在内存进行运行,然后程序结束后简单丢弃
3)字节码在虚拟机中运行
源代码->字节码->PVM(虚拟机)-> cpu
4.python只拥有运行时候,所有的工作都是在运行的时候做的,建立函数,类的操作,连接模块。
5.CPython指的是,用c语言编写的python软件, JPython是java写的
6.pyinstaller 生成自安装的二进制文件,exe 将代码虚拟机器
Python的对象类型
1.python是动态类型(自动跟踪你的类型而不是要求声明),但是它也是强类型语言(只能对一个对象进行合适该类型的有效操作)
2.列表解析表达式[row[1] for row in M if row[1] % 2 ==0]
3.列表解析回比for快2倍左右(TODO测试)
4.元组提供了一种不可变约束性
5.检查对象类型 1.if type(L) == type([]) 2.if type(L) == list 3.if isinstance(L, list)
数字
1.32位整形,跟无限长整形,可以通过后面加L,l来变成长整形,当超过32位的时候,会自动转为长整形。
2.bin(1<<2) 显示为bx100
3.小数对象可以修正浮点数运算精确度不够的问题 Decimal('0.1')
4.Fraction(2,3) 分数,Fraction('2', '3') 字符串也可以生成
5.True,跟False是1,0对象的子类,实际上就是数字,但是做了独特的显示,输出。但是True+1 会输出2
动态语言特点:
1.类型是对象的,而不是变量的,变量只是引用了对象。对象基本头部是类型跟引用计数。gc相关可以再总结
字符串:
1.r"(- -)/" 表示为原始字符串,不用转义
2.s = ‘a b c’ len(s) = 5 a, 换行符,b,缩进符,c 转义反斜杠是不跟字符串一起存储在内存中的
3.字符串翻转 s[::-1]
元组:
为什么要元组,元组提供了一种规则完整性,确保不会被其他引用所改变。但是元组里面的元素如果是列表,是可以改变的,元组的元素的引用不能变。
print(x, end = " ")
生成器跟迭代器:
迭代器是一个类似列表但是只提供了next接口进行迭代的结构
yield返回的是一个生成器,有迭代协议,可以进行迭代使用
map:
lst1 = [1,2,3] lst2 = ["one","two","three"]
print dict(map(None, lst1, lst2))
{1:"one",2:"two",3:"three"}
内置作用域 2.6 true false str list都在里面
嵌套作用域 , 嵌套函数,lambda 可变变量才能被子函数改变,不变变量只是只读,
全局变量 == 模块的属性
lambda 一个表达式,不是语句,匿名的函数,函数速写,推迟执行,替代def函数 常用于回调注册, 或者简单地内联代码,不要过度使用,def总能替代它
;callfunc = {
1:(lambda x, y: 1, 2)
}
继承搜索树,
对象->类->超类
方法是拥有特殊第一参数的函数,函数方法。是类对象的拥有的。也是面向对象的一个设计。因为传入的第一参数是实例对象,对实例对象做处理。故称面向对象
静态方法 staticmethod
类方法 classmethod
类装饰器