对象

Python中,一切皆对象。每个对象由:表示(identify),类型(type),值(value)组成
对象的本质就是:一个内存块,拥有特定的值,支持特定类型的相关操作。

引用

变量也成为了:对象的引用,因为,变量存储的就是对象的地址
变量通过地址引用了“对象”
变量位于:栈内存
对象位于:堆内存
Python是动态类型语言
变量不需要显式声明类型,根据变量引用的对象,Python解释器自动确定数据类型
Python是强类型语言
每个对象都有数据类型,只支持该类型支持的操作。

标识符

1、区分大小写
2、第一个字符必须是字母,下划线,其后的字符是:字母,数字,下划线
3、不能使用关键字,例如:if,while
4、以双下划线开头和结尾的名称通常有特殊含义,尽量避免这种写法

变量的声明和赋值

变量的声明和赋值用于将一个变量绑定到一个对象上
变量名=表达式
a=123

删除变量和垃圾回收机制

可以通过del语句删除不在使用的变量
如果对象没有变量引用,就会被垃圾回收机制回收,清空内存空间

链式赋值

用于同一个对象赋值给多个变量
x=y=123 ,x=123,y=123

系列解包赋值

系列解包赋值给对象相同个数的变量(个数必须保持一致)
a,b,c=4,5,6
相当于:a=4,b=5,c=6

使用系列解包赋值实现变量交换
a,b=1,2
a,b=b,a
print(a,b)

常量

Python不支持常量,即没有语法规则限制改变一个常量的值。我们只能约定常量的命名规则,以及在程序的逻辑上不对常量的值做出修改

基本数据类型

1、整型
2、浮点型
3、布尔型
4、字符串型

运算符

/浮点数除法 8/2 4.0
//整数除法7//2 3
** 幂 2**3 8
使用divmod()函数同时得到商和余数

整数

进制
0b或0B,二进制
0o或0O,八进制
0x或0X,十六进制
使用int()实现类型转换
int(9.9) 9
int(true)1
整数和浮点数混合运算时买自动变成浮点数
整数在Python中可以存储任意大小的整数,long被取消
round(value)可以返回四舍五入的值

同一运算符

is 是判断两个标识符是不是引用同一个对象
is not 是判断两个标识符是不是引用不同对象
is 与 = = 区别
is用于判断两个变量引用对象是否为同一个,既比较对象的地址
= =用于判断引用变量引用对象的值是否相等,默认调用对象的__eq___()
小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用
is运算符比== 效率高,在变量和None进行比较时,应该使用is

字符串

Python的字符串是不可变的

转义字符

描述

\

续行符

\ |反斜杠符号

\ ’

单引号

‘’

双引号

\ b

退格

\n

换行

\t

横向制表符

\r

回车

字符串拼接

可以使用+将多个字符串拼接起来,例如:
‘aa’+‘bb’==>‘aabb’
(1)如果+两边都是字符串,则拼接
(2)如果+两边都是数字,则加法运算
(3)如果+两边类型不同,则抛出异常

str()实现数字转型字符串
使用[]提取字符

字符串的本质就是字符序列,我们可以通过在字符串后面添加[],在[]里面指定偏移量,可以提取该位置的单个字符
正向搜索:
最左侧第一个字符,偏移量是0,第二个偏移量是1,以此类推,直到len(str)-1为止
反向搜索
最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2,以此类推,直到-len(str)为止

replace()实现字符串的替换
整个过程中,实际上我们是创建了新的字符串对象,并指向了变量a,而不是修改了之前的字符串。
字符串切片slice操作

切片slice操作可以让我们快速的提取子字符串,标准格式为:
[起始偏移量start:终止偏移量end:步长step]

操作和说明

示例

结果

[:]

“abcdef”[:]

“abcdef”

[start:]从start索引开始结尾

“abcdef[2:]”

“cdef”

[:end]从头开始直到end-1

“abcdef[:2]”

“ab”

[start:end]从start到end-1

“abcdef[2:4]”

“cd”

[start🔚step]从start提取到end-1,步长是step

“abcdef”[1:5:2]

“bd”

”abdcdefg”[-2]

倒数三个

“xyz”

abcdefghilkl[-8:-3]

倒数第八个到倒数第三个(包头不包尾)

split()分割和join()合并

split()可以基于指定分隔符将字符串分割成多个子字符串(存储到列表中)。如果不指定分隔符,则默认使用空白字符(换行符/空格/制表符)
join()的作用和split()作用刚好相反,用于将一系列字符串连接起来

字符串驻留机制和字符串比较

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

成员操作符

in/not in 关键字,判断某个字符是不是存在字符串中

常用查找方法

len(a) 字符串长度
a.startwith 以指定字符串开头
a.endswith 以指定字符串结尾
a.find 第一次出现指定字符串的位置
a.rfind 最后一次出现指定字符串的位置
a.count 指定字符串出现了几次
a.isalnum 所有字符全是字母或数字
a.strip 去除首尾指定信息

大小写转化

a.capitalize() 产生新的字符串,首字母大写
a.title() 产生新的字符串,每个单词都首字母大写
a.upper() 产生新的字符串,所有字符全转成大写
a.lower() 产生新的字符串,所有字符全转成小写
a.swapcase() 产生新的,所以字母大小写转化

格式排版

center()
ljust()
rjust()

其他方法

isalnum() 是否为字母或数字
isalpha() 检测字符串是否只由字母组成
isdigit() 检测字符串是否只由数组组成
isspace() 检测是否为空白符
isupper() 是否为大写字母
islower() 是否为小写字母

format()基本用法

基本语法是用过{}和:来代替以前的%
format 函数可以接收不限个参数,位置可以不按顺序

填充与对齐

^,<,>,分别是居中,左对齐,右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充

可变字符串

在Python中,字符串属于不可变对象,不支持原地修改,如果需求修改其中的值,智能创建新的字符串对象,但是经常我们确实需要原地修改字符串,可以使用io.StringIO对象或者array模块。

列表元素的增加和删除

append
原地修改列表对象,是真正的列表尾部添加新的元素,速度最快。
+运算符操作
并不是真正的尾部添加元素,而是创建新的列表对象,将原列表的元素和新列表的元素依次复制到新的列表对象中。这样,会涉及大量的复制操作,对于操作大量元素不建议使用
extend()方法
将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象
insert()插入元素
使用insert()方法可以将指定的元素插入到列表对象的任意制定位置,这样会让插入位置后面所有的元素进行移动,会影响处理速度,
del 删除
删除列表指定位置的元素
pop
pop()删除并返回指定位置元素,如果未指定位置则默认操作最后一个元素
remove
删除首次出现的指定元素,若不存在该元素抛出异常
index
活得指定元素在列表中首次出现的索引
count
获得指定元素在列表中出现的次数

元祖

列表属于可变序列,可以任意修改列表中的元素。元祖属于不可变序列,不能修改元祖中的元素,因此,元祖没有增加元素,修改元素相关的方法

元祖支持如下操作:
1、索引访问
2、切片操作
3、连接操作
4、成员关系操作
5、比较运算操作
6、计数:len,max,min,sum等
tuple()可以接收列表,字符串,其他序列类型,迭代器等生成元组
list()可以接收元组,字符串,其他序列类型,迭代器等生成列表

字典

字典是“键值对”的无序可变序列,字典中的每个元素都是一个键值对“”,包含““键对象”和“值对象”,可以通过“键对象”实现快速获取,删除,更新对应的“值对象”
“键”是任意的不可变数据,并且“键”不可重复
“值”可以是任意的数据,并且可重复
1、通过{},dict()来创建字典对象
2、通过zip()创建字典对象
3、通过fromkeys创建值为空的字典
字典的方芬
1、通过[键]获得“值”,若键不存在,则抛出异常
2、通过get()方法获得“值”,
3、列出所有的键值对
a.items()
4、列出所有的键,列出所有的值
a.keys()
a.values()
字典元素的添加,修改,删除
1、给字典新增“键值对”,如果“键”已经存在,则覆盖旧的键值对,如果不存在,则新增
2、使用update()将新字典中所有的键值对全部添加到旧字典对象上,
3、del()或者clear()删除所有键值对,pop()删除指定键值对,并返回对象的“值对象”
4、popitem(),随机删除和返回该键值对。字典是“无序可变序列”,因此没有第一个元素,最后一个元素的概念,popitem淡出随机的向,因为字典并没有“最后的元素”或者其他有关顺序的概念,若想一个接一个地移除并处理项,这个方法就非常有效。
序列解包可以用于元组,列表,字典。
序列解包可以让我们方便的对多个变量赋值
序列解包用于字典时,默认是对“键”进行操作,如果需要对键值对操作,则需要使用items(),如果需要对“值”进行操作,则需要使用values
用法总结:
1、键必须可散列
(1)数字,字符串,元组,都是可散列的
(2)自定义对象需要支持下面三点:
1、支持hash()函数
2、支持通过__eq__()方法检测相等性
3、若a==b为真,则hash(a)==hash(b)也为真
2、字典在内存中开销巨大,典型的空间换时间
3、键查询速度很快
4、往字典里面添加新键可能导致扩容,导致散列表中键的次序变化,因此,不要在遍历字典的同时进行字典的修改。

集合

集合是无序可变,元素不能重复。实际上,集合底层是字典实现,集合的所有元素都是字典中的“键对象”,因此是不能重复的且唯一的。

1、使用{}创建集合对象,并使用add()方法添加元素

2、使用set(),将列表,元组等可迭代对象转成集合,如果原来数据存在重复视距,则只保留一个。

3、remove()删除指定元素,clear()清空整个集合

浅拷贝和深拷贝

浅拷贝:不拷贝子对象的内容,知识拷贝子对象的引用

深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象

Python 类实例化对象内存空间 python 对象的内存地址_Python


可变参数

1、*param(一个星号),将多个参数收集到一个“元祖”对象中
 2、**param(两个星号),将多个参数收集到一个“字典”对象中