python学习
对象
python中,一切皆为对象。每个对象由:标识(identity),类型(type),值(value)组成。
- 标识用于唯一标识对象,通常对应对象在计算机内存中的地址。使用内置函数id(obj)课返回对象obj的标识。
- 类型用于表示对象存储的“数据”的类型。类型可以限制对象的取值范围以及可执行的操作。可以使用type(obj)获取对象的所属类型。
- 值表示对象所存储的信息。使用print(obj)可以直接打印出值。
对象的本质就是:一个内存块,拥有特定值,支持特定类型的相关操作。

引用
在python中,变量也变成:对象的引用。因为,变量存储的就是对象的地址。变量通过地址引用了“对象”。
变量位于:栈内存
对象位于:堆内存
python 是动态类型语言
变量不需要显式类型。根据变量引用对象,python解释器自动确定数据类型。
1 | a=3 |
python 是强类型语言
每个对象都有数据类型,只支持该类型支持的操作。
变量的声明和赋值
变量的声明和赋值用于将一个变量绑定到一个对象身上,格式如下:
变量名=表达式
最简单的表达式是字面量。比如:a=123。运行过程中,解释器先运行右边的表达式,生成一个代表表达式运算的结果的对象:然后,将这个对象地址赋值给左边的变量。
删除变量和垃圾回收机制
可以通过del语句删除不在使用的变量。如果对象没有变量应用,就会被回收器回收,清空内存空间。(自动回收)

基本内置数据类型介绍
整型(int)
整数,2345,python2中整数是32位 -2^63^—2^63^-1之间的数,python3中int可以存储任意大小的数,long被取消。python3中可以做超大数的计算,而不会造成数据溢出。
浮点型(float)
小数,314*e-2,浮点数在内存中也是按照科学计数法来存储的。
布尔型(bool)
表示真假,仅包含true,false,python2中没有bool值,直接用0,1表示,python3中true和false被定义成了关键字,但他们的本质还是0和1,甚至可以和数字相加。
字符串型(string)
由字符组成的序列
python不支持单字符类型,单字符也是作为一个字符串使用的。
python的字符串是不变的,我们无法对任意的原字符进行任意修改。但,可以将字符串的一部分复制到新创建的字符串当中,达到“看起来修改”的效果。
字符串的编码
python3直接支持unicode,可以表示世界上的任何书面语言的字符。python3的字符默认就是16位unicode编码,ascii码是unicode编码的子集。
使用内置函数ord()可以把字符转换成对应的unicode码;
使用内置函数chr()可以把十进制数转换成对应的字符。
引号创建字符串
可以通过单引号或双引号创建字符串。如:a=’abc’;b=’sxt’
使用两种引号的好处是可以创建本身就包含的引号的字符串,而不使用转义字符。如:
1 | >>>a="I'm a teacher!" |
python 允许空字符的存在,不包含任何字符且长度为0
用函数len()可以返回字符串的长度
转义字符串
使用“\+特殊符号“,来实现某些难以用字符表示的效果,比如换行等,常见的转义

例:
1 | >>>a='I\nlove\nU' |
字符串的拼接
可以使用+将多个字符串拼接起来。例如:’aa‘+’bb‘==》’aabb‘
- 如果+两边都是字符串,则拼接
- 如果+两边都是数字,则加法运算
- 如果+两边类型不同,则抛出异常
可以将多个字面字符串直接放在一起实现拼接。例如:’aa‘ ’bb‘==》’aabb‘
字符串的复制
使用*可以实现字符串的复制。
例:
1 | >>>a='wds5418'*3 |
不换行打印
调用print时,会自动打印一个换行符,若,我们不想换行,可以通过参数end=’任意字符串‘,实现末尾添加任何类容。
从控制台读取字符串
通过input()从控制台读取键盘输入的内容。
语法
链式赋值
链式赋值用于同一个对象赋值给多个变量。
1 | x=y=z //相当于:x=123,y=123 |
系列解包式赋值
系列数据赋值给对应相同个数的变量(个数必须保持一致)
1 | a,b,c=4,5,6 //相当于:a=4;b=5;c=6 |
操作使用系列解包赋值实现变量交换
1 | a,b=1,2 |

这里对比C语言数值交换,不用多定义一个变量。
运算符

类型转化和四舍五入
- 类似于int(),可以使用float()将其他类型转化成浮点数。
- 整数和浮点数混合运算时,表达式结果自动转型为浮点数。
- round()可以返回四舍五入的值。
注:但是不会改变原有值,而是会产生新的值
增强型赋值运算符
运算符+,-,*,/,**和%和赋值符都可以构成“增强型赋值运算符”。
a=a+1 等价于 a+=1

比较运算符

逻辑运算符

同一运算符

is与==区别:
is用于判断两个变量引用对象是否为同一个,既对象的地址。
==用于判断引用变量对象的值是否相等,默认调用对象的—eq—()方法
ps:整数缓存问题:
python 仅仅对比较小的整数进行缓存(范围为[-5,256]),而并非是所有的整数对象。需要注意的是,这仅仅是在 命令行中执行,而在pycham或者保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化(范围[-5,任何正整数])。
str()实现数字转型字符串
str()可以帮助我们将其他数据类型转换为字符串。例:
str(5.20)==》’5.20‘
当我们调用print()函数时,解释器自动调用了str()将非字符串的对象转化成了字符串。
使用[]提取字符
字符串的本质是字符序列,通过在字符串后面添加[],在[]里面指定偏移量,可以提取该位置的单个字符。
正向搜索
最左侧的第一个字符,偏移量为0,第二个偏移量为1,以此类推,直到len(str)-1为止
反向搜索:
最右边第一字符,偏移量为-1,倒数第二个为-2,以此类推,直到-len(str)为止
replace()实现字符串替换
字符串是“是不可变量”的,通过[]可以获取字符串指定位置的字符,但不能改变字符串,尝试改变字符串中的某个字符,就会报错。字符串虽然不可改变,但是,可以创建新的字符串来实现。
replace(’字符‘,’新字符‘)返回值是一个新的字符串
字符串切片slice操作
可以快速地提取字符串,标准格式为:
[起始偏移值start:终止偏移量end:步长step]
PS:默认包头不包尾;可以利用步长来跳取字符
spit()分割和join()合并
spite()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分割符,则默认使用空白字符(换行符/空格/制表符)示例代码如下:
1 | >>>a='to be or not to be' |
join()的作用正好相反,用于将一系列子字符串连接起来例:
1 | >>>a=['sxt','sxt100','swt200'] |
拼接字符串的要点:
使用字符串接符+,会生成新的字符串对象,因此不推荐使用+来拼接字符,推荐使用join()函数,因为join函数在拼接语言字符串之前会计算所有字符的长度,然后逐一拷贝,仅新建一次对象。
操作:测试品节符和join(),不同的效率
1 | import time |
字符串驻留机制和字符串同一性判定
字符串驻留:仅保存一份相同且不可变的字符串的方法,不同的值域被存放在字符串驻留池。python支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_),字母和数字会启用字符串驻留机制。
常用的查找方法


去除首尾信息
通过strip()去处字符串首尾指定信息。通过istrip()去除左边指定信息,rstrip()去除字符串右边指定信息。
大小写的转换

其他方法
- isalnum()是否都为字母和数字
- isalpha()检测字符串是否只由字母组成(含汉字)
- isdigit()检查字符串是否只由数字组成
- isspace()检测是否为空白符
- isupper()是否为大写字母
- islower()是否为小写字母
字符串的格式化
python2.6开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
基本语法是通过{}和:来替代以前的%
format函数可以接受不限个参数,位置可以不安顺序。

填充与对齐
填充和对齐一起使用^,<,>分别是居中,左对齐,右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
1 | >>>"{:*>8}".frmat("245") |
数字的格式化

时间的表示
计算机中时间的表示是从“1970年1月1日 00:00:00”开始的,以毫秒(1/1000秒)进行计算的。我们也把1970年这个时刻记为“unix时间点”。
这样,我们就把时间全部用数字表示了。

python 中可以通过time.time()获取当前时刻,返回的值是以秒为单位,带微秒(1/1000毫秒)精度的浮点数。