python学习

对象

python中,一切皆为对象。每个对象由:标识(identity),类型(type),值(value)组成。

  1. 标识用于唯一标识对象,通常对应对象在计算机内存中的地址。使用内置函数id(obj)课返回对象obj的标识。
  2. 类型用于表示对象存储的“数据”的类型。类型可以限制对象的取值范围以及可执行的操作。可以使用type(obj)获取对象的所属类型。
  3. 值表示对象所存储的信息。使用print(obj)可以直接打印出值。

对象的本质就是:一个内存块,拥有特定值,支持特定类型的相关操作。

Screenshot_20211029_095052_tv.danmaku.bili_edit_384246334166280.jpg

引用

在python中,变量也变成:对象的引用。因为,变量存储的就是对象的地址。变量通过地址引用了“对象”。

变量位于:栈内存

对象位于:堆内存

python 是动态类型语言

变量不需要显式类型。根据变量引用对象,python解释器自动确定数据类型。

1
a=3

python 是强类型语言

每个对象都有数据类型,只支持该类型支持的操作。

变量的声明和赋值

变量的声明和赋值用于将一个变量绑定到一个对象身上,格式如下:

变量名=表达式

最简单的表达式是字面量。比如:a=123。运行过程中,解释器先运行右边的表达式,生成一个代表表达式运算的结果的对象:然后,将这个对象地址赋值给左边的变量。

删除变量和垃圾回收机制

可以通过del语句删除不在使用的变量。如果对象没有变量应用,就会被回收器回收,清空内存空间。(自动回收)

Screenshot_20211029_193403_tv.danmaku.bili_edit_384119715821328.jpg

基本内置数据类型介绍

整型(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,甚至可以和数字相加。

QQ截图20211029232434_1_.png

字符串型(string)

由字符组成的序列

python不支持单字符类型,单字符也是作为一个字符串使用的。

python的字符串是不变的,我们无法对任意的原字符进行任意修改。但,可以将字符串的一部分复制到新创建的字符串当中,达到“看起来修改”的效果。

字符串的编码

python3直接支持unicode,可以表示世界上的任何书面语言的字符。python3的字符默认就是16位unicode编码,ascii码是unicode编码的子集。

使用内置函数ord()可以把字符转换成对应的unicode码;

使用内置函数chr()可以把十进制数转换成对应的字符。

QQ截图20211029235713_1_.png

引号创建字符串

可以通过单引号或双引号创建字符串。如:a=’abc’;b=’sxt’

使用两种引号的好处是可以创建本身就包含的引号的字符串,而不使用转义字符。如:

1
2
3
4
>>>a="I'm a teacher!"
>>>print (a)
>>>b='my_name is "tom"'
>>>print (b)

python 允许空字符的存在,不包含任何字符且长度为0

用函数len()可以返回字符串的长度

转义字符串

使用“\+特殊符号“,来实现某些难以用字符表示的效果,比如换行等,常见的转义

Screenshot_2021_1030_224611.png

例:

1
2
>>>a='I\nlove\nU'
>>>a

字符串的拼接

可以使用+将多个字符串拼接起来。例如:’aa‘+’bb‘==》’aabb‘

  1. 如果+两边都是字符串,则拼接
  2. 如果+两边都是数字,则加法运算
  3. 如果+两边类型不同,则抛出异常

可以将多个字面字符串直接放在一起实现拼接。例如:’aa‘ ’bb‘==》’aabb‘

字符串的复制

使用*可以实现字符串的复制。

例:

1
2
>>>a='wds5418'*3
>>>a

不换行打印

调用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
2
3
>>> a,b=1,2
>>> a,b=b,a
>>> print(a,b)

QQ截图20211029195620.png

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

运算符

Screenshot_20211029_200514_tv.danmaku.bili.png

类型转化和四舍五入

  1. 类似于int(),可以使用float()将其他类型转化成浮点数。
  2. 整数和浮点数混合运算时,表达式结果自动转型为浮点数。
  3. round()可以返回四舍五入的值。

注:但是不会改变原有值,而是会产生新的值

增强型赋值运算符

运算符+,-,*,/,**和%和赋值符都可以构成“增强型赋值运算符”。

a=a+1 等价于 a+=1

Screenshot_20211029_203239_tv.danmaku.bili.png

比较运算符

Screenshot_20211029_232906_tv.danmaku.bili.png

逻辑运算符

Screenshot_20211029_233137_tv.danmaku.bili.png

同一运算符

Screenshot_20211029_233336_tv.danmaku.bili.png

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
2
3
4
5
>>>a='to be or not to be'
>>>a.spite()
['to','be','or','not','to','be']
>>>a.spite(be)
['to ','or not to ','']

join()的作用正好相反,用于将一系列子字符串连接起来例:

1
2
3
>>>a=['sxt','sxt100','swt200']
>>>'*',join(a)
'sxt*sxt100*sxt200'

拼接字符串的要点:

使用字符串接符+,会生成新的字符串对象,因此不推荐使用+来拼接字符,推荐使用join()函数,因为join函数在拼接语言字符串之前会计算所有字符的长度,然后逐一拷贝,仅新建一次对象。

操作:测试品节符和join(),不同的效率

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import time
time01=time.time() #起始时间
a=''
for i in rang(10000):
a+='sxt'
time02=time.time() #终止时间
print(time02-time01)
time03=time.time()#起始时间
li=[]
for i in rang(10000):
li.append(sxt)
a='',join(li)
time04=time.time()#终止时间
print(time03-time04)

字符串驻留机制和字符串同一性判定

字符串驻留:仅保存一份相同且不可变的字符串的方法,不同的值域被存放在字符串驻留池。python支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_),字母和数字会启用字符串驻留机制。

常用的查找方法

Screenshot_20211031_093328_tv.danmaku.bili.png

Screenshot_20211031_093955_tv.danmaku.bili.png

去除首尾信息

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

大小写的转换

Screenshot_20211031_094634_tv.danmaku.bili.png

其他方法

  1. isalnum()是否都为字母和数字
  2. isalpha()检测字符串是否只由字母组成(含汉字)
  3. isdigit()检查字符串是否只由数字组成
  4. isspace()检测是否为空白符
  5. isupper()是否为大写字母
  6. islower()是否为小写字母

字符串的格式化

python2.6开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

基本语法是通过{}和:来替代以前的%

format函数可以接受不限个参数,位置可以不安顺序。

QQ截图20211031101849.png

填充与对齐

填充和对齐一起使用^,<,>分别是居中,左对齐,右对齐,后面带宽度

:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充

1
2
>>>"{:*>8}".frmat("245")
'*****245'

数字的格式化

Screenshot_20211031_103425_tv.danmaku.bili.png

时间的表示

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

这样,我们就把时间全部用数字表示了。

Screenshot_20211029_203817_tv.danmaku.bili.png

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