1、列表的索引和插入、访问
在访问列表时,下标不能超过有效范围,否则报错
在用负值访问列表时,-1表示最后一个位置,以此类推
在用insert插入时,-1表示倒数第二个位置,除非原表为空,以大于表长为index插入,会插入到最后。
2、range区间左开右闭
3、return 缩进于def
4、关于参数拷贝:
形参和实参的地址不会因为名字不一样而改变
如果形参在函数内部做了运算,其地址和实参不一致,如果不返回的话可能出错
5、if “” 不成立 if [] 不成立 if 0 不成立 if[[]]成立
6、作用域
python能够改变变量作用域的代码段是def、class、lamda.
if/elif/else、try/except/finally、for/while 并不能涉及变量作用域的更改,也就是说他们的代码块中的变量,在外部也是可以访问的
变量搜索路径是:本地变量->全局变量
7、for 迭代器 如果变化,index还是继续计数
9、list正反向越界都会报错
10、split函数可以分割多个空格。无论是否引入re,path中\的识别都是’\'
11、python is和 == 的区别,前者要求地址和数值均相等,后者只要求数值相等。
12、深浅拷贝:
深浅拷贝,恰如其名,区别在于数据共享的层次
浅拷贝:重新分配内存,父对象数据共享,新变量的子对象变化,原数据子对象不变;
深拷贝:重新分配内存,父、子对象数据都会共享,新变量子对象变化,元数据子对象也变
对于一维列表而言,两者的效果是一样的,因为不存在子对象。
对于普通的列表赋值:既不是深拷贝,也不是浅拷贝,内存是共享的,相当于变量有多个名字,除非用list()处理。
队列表做切片后,相当于两个完全独立的变量
普通的变量赋值:a=b,那么ab共享内存,但是这没太有意义,因为接下来任何一个变量放在左值,其内存会
改变,自此两个变量在内存上就没有任何关系了。(例如自增操作会改变变量的内存)
13、python字典
13.1 普通字典的get方法
dict_a.get(key, default):获取键为key的值,如果没有该键值对就返回默认值
13.2 默认字典与工厂函数:
from collections import defaultdict
a = defaultdict(int 或者str/list等)作用,当访问不存在的键时返回默认值,默认值类型为指定工厂函数类型
13.3 有序字典
from collections import OrderedDict
13.4 计数器<可以用作统计器>
from collections import Counter
s = ‘abcdfg’
count = Counter(s)
for i, j in count.items():
print(i, j)
14、列表去重
L = [3, 1, 2, 1, 3, 4]
T = sorted(set(L), key=L.index)
[3, 1, 2, 4]
15、列表排序
1、采用内嵌函数:a = sorted(a) # 需要返回值,这和reversed函数不同
2、调用方法:a.sort()
16、位运算
位运算符 说明
符号 | 含义 |
<< | 按位左移,左移n位相当于乘以2的n次方 |
>> | 按位右移 ,左移n位相当于除以2的n次方 |
& | 按位与,二进制位数同且为1结果位为1 |
| | 按位或 ,二进制位数或有1结果位为1 |
^ | 按位异或 ,二进制位数不同结果位为1 |
~ | 按位取反,二进制位0和1结果位互换 |
17、字符判断
# 没有下划线
'12'.isnumeric() # 数字, 支持汉字
'12'.isdigit() # 数字,支持byte类型
#在常规应用中两者可以替换
'a'.isalpha() # 字母
'a'.isalnum() # 字母或者数字
'a'.islower() # 小写
'a'.isupper() # 大写
' '.isspace() # 空格
ord('A') == 65
chr(65) == 'A'
18、eval函数-计算字符串形式的expresson
print(eval('6 + 9 * 9// 8')) # 16