字符串:一串不可变的字符序列
特殊字符:为了描述字符的一些状态,例如换行,缩进等,使用特殊的字符组合表示该类信息,例如:
\ | \\ | \n | \t | \r | \' | \b | \f | \v | \oxxx | \xyy | \b |
---|---|---|---|---|---|---|---|---|---|---|---|
转义 | \ | 回车 | 制表符 | 回车 | 单引号 | 退格 | 换页 | 纵向制表符 | 8进制 | 16进制 | 二进制 |
防转义: r " string " 输出string原始字符,不会对其进行转义
例如:
print( "d:\goproject\src\to_code" ) # \t将会被转义为 tab
print( r"d:\goproject\src\to_code" ) # 使用r " " 防止字符内部 \ 进行转义
\r\n : 回车换行符
通常连续出现表示对文本换行
\r 表示将光标返回行首,在依次进行显示,此时若光标后有字符,将会被重新覆盖,可以用它打印进度条
例1:
import time
for i in range(101):
time.sleep(i/90)
print("进度:%d%%" %(i),end="\r")
例2:
import time
for i in range(101):
time.sleep(i/90)
print("+" * i + "-"*(100-i), end=" \r ")
\x123 ,"\123",分别表示16进制,10进制
print("\123") # 十进制 ascii码 123对应的 "s"
print("\x41\x42") # 16进制41,42对应的字符 A和 B
常量:使用全大写变量名定义,提示开发者不要对其进行更改(默认约定)
字面常量:如:1, “abc”,等字符或数字类型数据
位运算:
位运算使用数字的二进制形式进行运算;& (与); | (或) ;~(按位取反); ^(异或:相异出一)
计算机储存形式:计算机储存的是数字的补码,最高位0为正,1为负数,底层计算时直接使用补码进行计算,计算结果进行输出是转换源码对应的二进制的数字。
补码:对于负数,原码的符号位不变,其他位按位取反,再加一得到补码,补码执行同样的操作可以得到原码
例如:计算10^9 和 10^-9
负数 字面值 反码 补码 -9 1000 1001 1111 0110 1111 0111 10 0000 1010 0000 1010 0000 1010 9 0000 1001 0000 1001 0000 1001
逻辑运算
or 和 and 的短路运算,0 and ---, 和 1 or 将会出现短路,停止计算and 或者 or 之后的内容,返回前面的值
运算符优先级:单目>双目,算数>位运算>身份>成员>逻辑
* 垃圾回收(GC)*
程序长时间运行造成大量的内存空洞,在需要大量连续内存时无法开辟空间而造成内存泄漏,Python使用了垃圾回收机制解决此类问题
垃圾回收:使用引用计数将未使用的内存碎片进行标记,当内存空洞达到一定的程度将触发垃圾回收机制,对碎片化的内存进行“”腾挪“”,提供连续的内存空间以供使用,在垃圾回收( GC )期间程序停止运行(stw)
引用计数 **:未使用的数据引用计数将会清零,垃圾回收机制将会对其进行清理;使用sys.getrefcount(x) 可以查看x对应值的引用计数
math.floor(3.4)
math.ceil(),
int("b",16)
round(2.501)
a = hex(100) # ==> "0x64" 字符串类型
a = 0x64 # ==> 数字类型
isinstance(" ", (str,int,tuple) # ==> True
列表是连续的,可变的,线性数据结构,内部可以储存不同数据类型的数据
几种常见数据类型比较
列表:一串连续大小相等的内存空间,数据按顺序依次存储,Python中列表在空间沾满前会自动进行扩容。
特点:方便数据查询,使用索引可以直接定位元位置,增加、删除,插入(尤其在靠近列首位置)操作需要对后部元素进行挪动,效率较低。
链表:储存单元在内存中随机分布,上一个元素拥有下一个元素地址,只能通过上一个元素找找到先一个元素信息。
特点:方便插入 ,删除操作,时间复杂度为O(1),查询操作较为繁琐时间复杂度为 O(n)
栈:(stack) :LIFO,后进先出模型,例如,网页后退:每次打开新的网页会进行一次压栈操作,返回操作时返回到最后一次压栈前的效果,再例如撤销操作
队列:排队模型,队列之后唯一的出口和进口,按照排队前后顺序依次对数据进行操作。
当服务器无法同时处理大量请求,将会对请求进行排队,按照顺序依次处理请求。
列表常用方法:
.index(value,start,stop) 时间复杂度n,性能低
.len(list) 元数据中已经记录 繁杂度1
.insert(index,value) 超出界限,尾部追加
.append() , 添加一个元素
.extend() , 如果是可迭代的对象会遍历出来添加多个
.sort(key=str, reverse =True ) 降序,临时啊转化类型进行比较,不会改变原来的类型
"+" 生成一个新的元素,新的列表空间太大
" " : [1] 3 = [1,1,1]; [[1] 3] = [[1,1,1]]; [[1]] 3 = [[1],[1],[1]]
简单类型和复杂类型:
当列表中储存复杂类型时,储存的是该数据的内存地址,使用其他变量对该地址下数据进行更改时,列表中数据会发射改变:
lis1 = [[100],[100],[100]] 和 lis2 = [[100]] * 3的区别
lis2中的[100]引用的是同一个对象
拷贝和深拷贝:
copy(shadecopy) 和 copy.deepcopy
copy浅拷贝:拷贝数据地址,引用的同一份数据,原始数据不会增加,数据引用计数加1
深拷贝:找到最底层的数据进行拷贝,并储存新数据的内存地址,数据值相同但是两份不同的数据可以使用id()查看地址
random
.shuffle([ ]) 洗牌打乱
.choice([ ])
.randint(1,3) 1-3区间整数
.randrange(1,3) 1-2区间
.sample([ ], k=), 列表中选K个“不同”的元素,不放回抽取模型
.choices([ ], k=) , 列表中选取K个元素, 放回抽取模型
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。