1.Python的运行环境
安装Python的时候,会安装一个解释器和PVM
解释器:将代码编译成字节码,不同的解释器可以编译成不同的字节码,如CPython、JPython、IronPython、PyPy
现在安装的是cpython的解释器
解释器编译过后的文件后缀名是.pyc其中C是指compile编译的意思;
PVM:负责托管运行编译后的字节码
托管语言和非托管的语言,其中c vb和c++直接和os交互,而c#和java以及python为托管语言。
python的劣势:运行效率低,要经过托管。
python的web框架,最流行的2个:Django Flask
python代码,通过解释器解析成字节码 pyc 文件,然后通过pvm转换成字节码。
标准的python为cpython,可以通过解释器解释为java或者dotnet等字节码。
而不同的解释器可以将py文件解释为不同的字节码。

托管的好处:帮忙开发人员降低了很多工作,比如内存的回收的释放。
2.Python的层级
表达式:创建、处理对象
语句:由表达式构成语句
模块:语句又构成模块
程序:许多模块构成程序
3.Python的变量
在许多静态语言中,在声明变量的时候就规定了类型,在该变量中只能存储对应的变量类型。
python是强类型的语言,他的数据类型是根据变量所指向的值决定的。
python的变量类型是由对象决定的,而不是由变量决定的。变量可以改变指向的对象,变量指向的类型是可变的,所以说python也是动态类型的语言。
可以通过type()函数来查看变量的类型

命名规则:
1.由数字、字母、下划线 3种类型的字符组成;
2.不能由数字开头
3.不能包含空格(因为只能有数字、字母和下划线);
4.不能和python的关键字相同;
5.尽量避免0和o,l和1命名;
总结:只能由数字+字母+下划线来命名,且不能以数字开通。
4.python的数据的类型
Python的变量类型取决于实际关联的对象
数字类型:
整型 int
浮点型 float
精确类型 decimal
分数类型 fraction
....
字符串类型:str
列表: list
字典:dict
元组:tuple
集合:set
文件:file
布尔:boolen
True
False
空:None
程序块类型:
函数 function
类 class
模块 module
....

5.Python的数据的存储
1.声明一个变量名,就生成一个系统变量表;
2.声明的时候赋值,就是变量名对值的地址的引用,同时在python的系统类型中确认的变量类型;
python的类型只与对象有关,与变量无关;
python的变量的申明是动态类型,可以动态指向不同的值。
可以通过id函数来查看变量存储的内存

6.变量的销毁和垃圾回收机制(GC)
1.python有一个垃圾回收的机制,为GC
2.第一次赋值的时候,会对对象创建一个引用计数器,来确定对象是否被引用;
7.共享引用:多个变量引用一个对象
a = "Jerry"b = aid(a)1528516950704id(b)1528516950704id("Jerry")1528516950704通过id()函数可以查看变量的地址,发现变量 a b和字符串Jerry都有相同地址,所以是相同的变量
如果此时改变变量a的值,但是b的值是不会变化的,这个值得注意
a=13
a
13
b
'Jerry'

如何检验不同的变量是否引用的同一个对象呢?
-
字面值是否相等:使用 ==
age = 20score = 20age == scoreTrue 2.判断变量是否引用同一个对象,判断地址是否相同,使用is操作符
age = 20score = 20age == scoreTrueage is scoreTrue2.python中的小数的内存池
对于经常使用的较小的数值,python会在内存中将[-5,256]先创建一份,使用的时候直接指向数值的内存地址;
查看对象被引用的次数,使用sys模块中的:getrefcount() 函数可以获取到
>>> import sys>>> a = "Jerry">>> sys.getrefcount("Jerry")4
7.数值类型
256以下的整数已经被python缓存

整型:整型的最大值只受计算机的硬件限制,不受变量类型限制,如果是32位置的系统
可以通过math模块中的maxsize来获取计算机支持的最大整型的数值
并且在python中int类型大小是无上限的,对于大数会进行python的大数运算
import sysprint(sys.maxsize) >>>9223372036854775807为何是这么多呢?
因为是64bit的操作系统,最大就是64个1组成的二进制的数,第一位为符号位置,就是有63个1转化为10进制数为2**63-1 = ±9223372036854775807
浮点型:
声明变量时候需要赋值
如果赋值为0.3可以省略前面的0直接写.3就可以了
浮点型的数据格式化:
使用format进行格式控制输出
# 使用format输出a = 15.4b = 'price is: {}'.format(a)print(b)>>>price is: 15.4# format 的进制转化
This section contains examples of the str.format() syntax and comparison with the old %-formatting.
In most of the cases the syntax is similar to the old %-formatting, with the addition of the {} and with : used instead of %. For example, '%03.2f' can be translated to '{:03.2f}'.
# 十进制转十六进制h = '{:x}'.format(25830)print(h)>>>64e6# 如果使用X可以输出大写的十六进制-20190125添加>>{:X}'.format(25830)>>'64E6'# 十进制转八进制o = '{:o}'.format(369)print(o)# 十进制转二进制b = '{:b}'.format(65)print(b)# 转十进制d1 = '{:d}'.format(0x64e6)print(d1)d2 = '{:d}'.format(0o561)print(d2)d3 = '{:d}'.format(0b1000001)print(d3)>>>25830>>>369>>>65内置函数的类型转换
# 转十六进制h1 = hex(25830)print(h1)h2 = hex(0b10010)print(h2)h3 = hex(0o561)print(h3)>>>0x64e6>>>0x12>>>0x171# 转二进制
b1 = bin(56)b2 = bin(0x55)b3 = bin(0o335)print(b1,b2,b3,sep='|')>>>0b111000|0b1010101|0b11011101# 转八进制
o1 = oct(16)print(o1)o2 = oct(0x112)print(o2)o3 = oct(0b1101)print(o3)>>>0o20>>>0o422>>>0o15#如果想要在16进制前面加上0x怎么解决呢?可以通过在输出的字符上用format,{}前面加上0x即可>>> "0x{:0>4x}".format(336)'0x0150'8.math模块
import mathmath.pi3.141592653589793python的精度问题>>> 2.2+1.13.3000000000000003该问题是由计算机的硬件计算浮点型导致的解决方法:可以使用decimal类型from decimal import DecimalDecimal(1.1) + Decimal(2.2)>>>Decimal(3.3)random函数>>> import random>>> random.random()0.2850653356138706# randint(start,end)用于生成指定范围的随机数>>> random.randint(1,45)28# random.sample()
浙公网安备 33010602011771号