1.1程序执行原理
python语言的特点:解释型语言,运行时不需要全部编译成二进制代码,把原程序转换成字节码。
python语言靠缩进控制 四个空格表示一个缩进次
计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的的程序语言翻译成机器语言,计算机才能执行程序。翻译的方式有两种(如图所示)
![](https://i-blog.csdnimg.cn/blog_migrate/590294c2501041d6fd3e5e7637df2ea2.png)
1.2 IDLE
![](https://i-blog.csdnimg.cn/blog_migrate/0af15cdd8c23019102cecbcb075b97ee.jpeg)
1.3 python基础知识
1.4.1python对象模型
在python中的一切都是对象。
python中有些许多内置对象可供编程者直接使用,例如:数字,字符串,列表,元组,字典,集合,del命令和len(),id(),type()等大量内置函数
![](https://i-blog.csdnimg.cn/blog_migrate/dea05d5da44761777fd7095d29e83157.jpeg)
1.4.2 python变量
python是一种动态型语言,也就是说变量类型可以相互转化:
>>> x=3
>>> print(type(x))
<class 'int'>
>>> x='Hello'
>>> print(type(x))
<class 'str'>
>>> x=[1,2,3]
>>> print(type(x))
<class 'list'>
在大多情况下,如果变量出现在赋值分隔符或复合复制分隔符(例如:+=,*=)的左边表示创建变量或者修改变量的值,负责表示引用该变量的值,这一点同样适合用于使用下标来访问列表,字典等可变序列以及其他自定义函数:
>>> x=3
>>> print(x**2)
9
>>> x+=6
>>> print(x)
9
>>> x=[1,2,3]
>>> print(x)
[1, 2, 3]
>>> x[1]=5
>>> print(x)
[1, 5, 3]
>>> print(x[2])
3
字符串和元组属于不可变序列,则会意味着不能通过下标的方式来修改其中的元素值。例如:
![](https://i-blog.csdnimg.cn/blog_migrate/841815ab39edbe5bbb263d3ce3cd5c43.png)
在python中允许多个变量引用同一个值:
>>> x=3
>>> id(x)
2591723514224
>>> y=x #y和x引用同一个值
>>> id(y)
2591723514224 #与x的地址相同
继续上面示例的代码,修改其中一个变量的值以后,实际修改的是变量的引用,其内存地址会发生变化,但是这并不影响另外有一个变量
![](https://i-blog.csdnimg.cn/blog_migrate/12076c1c8e2fd1ece5b12caf1abe5c7e.png)
内置函数id()用来返回一个对象的内存地址。在python中修改变量值的操作,并不是修改了变量的值,而是修改了变量指向的内存地址。
![](https://i-blog.csdnimg.cn/blog_migrate/83a58b1116c5fa5162d5b583e8d944a8.png)
python采用基于值的内存管理方式,如果为不同变量赋值为相同的值,这个值在内存中只保留一份,多个变量指向同一个值的内存空间的首地址,这样可以减少内存空间的占用,提高内存利用率。
python再启动时,会对[-5,256]的整数进行缓存。对于区间[-5,256]之外的整数,同一个程序中或者交互模式下同一个语句中的同值不同名变量变量会共用同一个内存空间。
>>> x
-6
>>> y
-6
>>> id(x)==id(y)
False
>>> x=-5
>>> y=-5
>>> id(x)==id(y)
True
注意:如果是float类型就不可以
>>> x=3.0
>>> y=3.0
>>> id(x)==id(y)
False
补充:
>>> x,y=300000,300000
>>> id(x)==id(y)
True
>>> x=[666666,666666]
>>> y=[666666,666666]
>>> id(x)==id(y)
False
>>> id(x[0])==id(x[1])
True
>>> id(y[0])==id(y[1])
True
>>> id(x[0])==id(y[0])
False
综上,python不会对实数进行缓存。交互模式下不同的语句中同值不同名的变量不共用一个内存空间。同一个语句或者同一个程序中的同值不同名变量会公用同一个内存空间。例如:
![](https://i-blog.csdnimg.cn/blog_migrate/207eaf3ae6871aed1e448062751c7d5b.png)
python具有自动管理内存的功能,会跟踪所有值,并自动删除不在使用的或者引用次数为0的值。
如果某一个变量不再使用,可以使用del命令显示删除该变量,值的引用次数减1,当某一个值的引用次数变为0时,将会被python的垃圾回收机制自动删除并释放内存空间。可以使用标准库函数sys.getrefcount(x)查看对象x的值引用次数。注意:记得导入>>>import sys >>>sys,get
最后,定义变量名:
1.变量名都必须以英文字母,汉字或者下划线开头
2.变量名中不能有空格以及中英文标点符号
3.不能使用关键字作为变量名,可以导入keyword模块后使用print(keyword.kwlist)查看所有的关键字
4.变量名区分英文字母大小写
1.4.3 数字
在python中,数字类型变量可以表示任意大的数值,并且可以判断出是什么类型
>>> a=9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
>>> a*a
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
>>> a**3
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
python数值类型主要有整形,浮点数和复数
整数类型可以分为下面几种
(1)十进制整数,如0、-1、9、123
(2)十六进制整数,使用0、1、2、3,4,5、6、7、8、9、a,b、c,d,e,f来表示整数,必须以0 x开头,如0x10、0xfa,0xabcdef。
(3)八进制整数,使用8个数字0、1、2、3、4、5、6、7来表示整数,必须以0o开头,如0o35、0o11。
(4)二进制整数,使用2个数字0、1来表示整数,必须以0b开头,如0b101、0b100。
浮点数也称为实数或小数,.3、15.0,0.37、-11.2、1.2e2,314.15e-2都是合法的浮点数。
Python中的复数与数学中复数的形式完全一致,由实部和虚部构成,使用j或J来表示虚部。
>>> a=3+4j
>>> b=5+6j
>>> c=a+b
>>> c
(8+10j)
>>> c.real #查看复数实部
8.0
>>> c.imag #查看复数虚部
10.0
>>> a.conjugate() #返回共轭复数
(3-4j)
>>> a*b #复数乘法
(-9+38j)
>>> a/b #复数除法
(0.6393442622950819+0.03278688524590165j)
python3.6.x开始支持在数字中间位置使用单个下划线作为分隔来提高数字的可读性,类似于数学上使用逗号作为千位分隔符,下划线可以是数字中间的任何位置,但是不能在开始和结束位置。
)
>>> 1_000_000
1000000
>>> 1_2_3_4
1234
>>> 1_2+3_4j
(12+34j)
>>> 1_2.3_45
12.345
1.4.4字符串
在python中,字符串属于不可变序列,可以使用单引号,双引号,三引号进行界定,而且单引号,双引号和三引号还可以相互嵌套,用来表示复杂的字符串。
例如:
'''Tom said,"Let's go" '''
python支持转义字符,常用的如图:
![](https://i-blog.csdnimg.cn/blog_migrate/e42bac028a9801d2e518dfa452a26ec7.jpeg)
1.4.5运算符与表达式
![](https://i-blog.csdnimg.cn/blog_migrate/443b4130c38d68d1dad7bb31f9b8ff21.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/465591b78165684566c172fb8b9cd9ed.jpeg)
💭and和or具有惰性求值的特点
and:左右为真同时为真,一真一假为假
or:只有一个真就为真
>>> 3>5 and a>3 #注意,此时并没有定义变量a
False
>>> 3>5 or a>3 #3>5的值是false,所以需要计算后面的表达式
NameError: name 'a' is not defined
>>> 3<5 or a<3 #3>5是true,不需要计算后面的值
True
>>> 3 and 5>2
True
>>> 3 and 5 #最后一个计算的表达式的值作为整个表达式的值
5
💭逗号并不是运算符,只是一个普通分隔符
💭python不支持++和--运算符
1.4.6常用内置函数
![](https://i-blog.csdnimg.cn/blog_migrate/56ff2229a042a2fe8cd14accaf9f480e.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/f7f561cd3de920ec2c82bdf026c25bc4.jpeg)